JavaServer Faces 2.0 草案发布——增强 JavaScript 库的交互性

  • Dio Synodinos
  • 张龙

2008 年 6 月 20 日

话题:JavaWeb框架JavaScript语言 & 开发架构

在 JSF 2.0 草案发布前,社区提出了一些请求,希望增加几个新特性。Shay Shmeltzer 在 JDJ 上发表了一篇文章,列举出了他对 JSF 下一个版本的希望,这可以被总结为如下几点:

JSF 2.0 草案所关注的问题之一就是利用开放的 Ajax 注册来解决 JavaScript 语言缺少命名空间支持的缺陷。开放 Ajax 联盟是使用 Ajax 的厂商和开源项目所形成的一个组织,旨在维护 OpenAjax 注册(一个集中、业界范围的 Ajax 注册授权,目的在于保持一个业界统一的 Ajax 运行时列表,以防止对象冲突)。

有一个已经注册到开放 Ajax 联盟的顶级命名空间——javax:

Java Ajax: {

namespaceURI: http://www.sun.com,

version: "1.0",

globals_to_approve:["javax"],

comments: "Used in the JSF 2.0 specification.",

specificationURI:"http://www.jcp.org/en/jsr/detail?id=316",

email: "jsfaces@sun.com"

}

为了遵守 OpenAjax 联盟的约定,当 JavaScript 文件被获取并由浏览器的 JavaScript 引擎解析时,库必须要使用 OpenAjax.registerLibrary() 来注册自己。

任何使用 JavaServer Faces 2.0 JavaScript API 的页面必须要定义一个名为 javax 的顶级 JavaScript 对象,其类型是 JavaScript 联合数组(associative array)。在这个顶级 JavaScript 对象内,建立起 OpenAjax Hub,其中必须有一个名字叫做 faces 的属性,其值必须是另一个 JavaScript 联合数组。在这个 faces 对象中,在键 Ajax 下还必须有另一个 JavaScript 数组。

if (javax == null || typeof javax ==  "undefined") {

var javax = new Object();

}

if (javax.faces == null || typeof java.faces == "undefined") {

javax["faces"] = new Object();

}

if (javax.faces.Ajax == null || typeof javax.faces.Ajax == "undefined") {

javax.faces["Ajax"] = new Object();

}
JavaWeb框架JavaScript语言 & 开发架构