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

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

作者 Dionysios G. Synodinos译者 张龙 发布于 2008年6月20日 上午1时34分

社区
Java
主题
JavaScript,
Web 2.0,
Web框架,
JCP标准
标签
AJAX,
OpenAjax联盟,
JSF

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的AJAX集成标准化
  • 简化JSF组件的构建
  • 增加更多的状态
  • 将一个新的组件增加到JSF Flow中
  • 使Flows可重用
  • 将声明式UI增加到业务组件绑定中

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

你可能感兴趣的:(JavaScript,java,Ajax,JSF,web框架,web应用开发)