在 JSF 2.0 草案发布前,社区提出了一些请求,希望增加几个新特性。Shay Shmeltzer 在 JDJ 上发表了一篇文章,列举出了他对JSF 下一个版本的希望,这可以被总结为如下几点:
JSF 2.0 草案所关注的问题之一就是利用开放的Ajax 注册来解决JavaScript 语言缺少命名空间支持的缺陷。开放Ajax 联盟是使用Ajax 的厂商和开源项目所形成的一个组织,旨在维护OpenAjax 注册(一个集中、业界范围的Ajax 注册授权,目的在于保持一个业界统一的Ajax 运行时列表,以防止对象冲突)。
有一个已经注册到开放Ajax 联盟的顶级命名空间——javax:
<pre id="ijh.65">Java Ajax: {<br id="ijh.66"></br> namespaceURI: http://www.sun.com,<br id="ijh.67"></br> version: "1.0",<br id="ijh.68"></br> globals_to_approve:["javax"],<br id="ijh.69"></br> comments: "Used in the JSF 2.0 specification.",<br id="ijh.70"></br> specificationURI:"http://www.jcp.org/en/jsr/detail?id=316",<br id="ijh.71"></br> email: "jsfaces@sun.com"<br id="ijh.72"></br> }
为了遵守 OpenAjax 联盟的约定,当 JavaScript 文件被获取并由浏览器的 JavaScript 引擎解析时,库必须要使用 OpenAjax.registerLibrary() 来注册自己。
任何使用 JavaServer Faces 2.0 JavaScript API 的页面必须要定义一个名为 javax 的顶级 JavaScript 对象,其类型是 JavaScript 联合数组(associative array)。在这个顶级 JavaScript 对象内,建立起 OpenAjax Hub,其中必须有一个名字叫做 faces 的属性,其值必须是另一个 JavaScript 联合数组。在这个 faces 对象中,在键 Ajax 下还必须有另一个 JavaScript 数组。
<pre id="ijh.76">if (javax == null || typeof javax == "undefined") {<br id="ijh.77"></br> var javax = new Object();<br id="ijh.78"></br> }<br id="ijh.79"></br> if (javax.faces == null || typeof java.faces == "undefined") {<br id="ijh.80"></br> javax["faces"] = new Object();<br id="ijh.81"></br> }<br id="ijh.82"></br> if (javax.faces.Ajax == null || typeof javax.faces.Ajax == "undefined") {<br id="ijh.83"></br> javax.faces["Ajax"] = new Object();<br id="ijh.84"></br> }
评论