作者 Dionysios G. Synodinos译者 张龙 发布于 2008年6月20日 上午1时34分
JSR 314草案已经发布到JCP下了。该JSR的目标是将JavaServer Faces规范1.2版升级到2.0版。这个下一代的JSF是将web应用开发中的优秀思想带到Java EE平台的一个尝试,并且不断从社区中获得积极反馈,尤其是其增强的AJAX支持。
在JCP的页面上总结了该版本JSF的几个主要目标:
专家组提出的观点涵盖以下方面:
- 对于使用图形化IDE和命令行的开发者来说,最大化web应用开发的效率。
- 在产品的生命周期内,最小化web应用维护的复杂性。
- 通过有效使用Ajax技术简化响应界面的创建。这包括把几乎所有的MVC控制器UI逻辑和内部页面组件交互放到客户端,同时在服务器端保留敏感级的应用逻辑。同时当JavaScript被禁用或者不可用时考虑如何优雅地退化也是非常重要的。
- 通过继续支持无需在客户端使用JavaScript的、功能完备的、基于服务器的web应用,从而使你的Web应用扩展成为可能。
- 利用模块化来加强JSF框架和其它客户端及服务器端的web应用技术的集成性。这使得开发者能更加轻松地使用JSF的单个部分,而无需使用其全部。例如,即使没有JSF视图呈现时,请求处理的生命周期也是可用的。再比如,JSF具有鲁棒的I18N与L10N特性。你可以为UI使用这些特性而无需使用JSF组件。简而言之:“易于mashup”。
- 通过使用Java持久化API进而方便地展现数据。
在JSF 2.0草案发布前,社区提出了一些请求,希望增加几个新特性。Shay Shmeltzer在JDJ上发表了一篇文章,列举出了他对JSF下一个版本的希望,这可以被总结为如下几点:
JSF 2.0草案所关注的问题之一就是利用开放的Ajax注册来解决JavaScript语言缺少命名空间支持的缺陷。开放Ajax联盟是使用Ajax的厂商和开源项目所形成的一个组织,旨在维护OpenAjax注册(一个集中、业界范围的Ajax注册授权,目的在于保持一个业界统一的Ajax运行时列表,以防止对象冲突)。
该注册具有如下好处:
该注册能防止JavaScript和标记冲突,并提供了其他一些好处:
- Ajax库开发者可以使用该注册:
- 确保其JavaScript全局对象、运行时扩展(JavaScript和DOM)及特定于库的标记不会与其他Ajax库的名字发生冲突。
- 协调他们的工作以扩展JavaScript环境,这样可以使得多个库为其扩展共享同样的名字和规范
- 浏览器厂商可以使用该注册:
- 确保浏览器中新增的内置JavaScript特性不会与业界已经使用的名字发生冲突
- Ajax应用开发者可以使用该注册:
- 确保在其应用中使用的任何JavaScript全局变量不会与流行的Ajax库的全局变量发生冲突
正如JSF 2.0草案所述:
有一个已经注册到开放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: "[email protected]"
}为了遵守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();
}
你可以访问http://www.infoq.com/webframework以了解关于Java或者其他Web框架更多的信息。
查看英文原文:Early Draft released for JavaServer Faces 2.0 - Improved Interoperability for JavaScript Libraries
http://www.infoq.com/cn/news/2008/06/jsf-2.0-early-draft