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

作者
Dionysios G. Synodinos译者
张龙

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: "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();
}

你可以访问http://www.infoq.com/webframework以了解关于Java或者其他Web框架更多的信息。

查看英文原文:Early Draft released for JavaServer Faces 2.0 – Improved Interoperability for JavaScript Libraries

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: