当前位置:51VIP源码软件下载联盟网络学院程序开发java教程 → JSF1.2技术的新特性总结

JSF1.2技术的新特性总结

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-7-3 2:37:20 我要发布文章
原作地址:http://java.sun.com/developer/technicalArticles/J2EE/jsf_12/
翻译:Jaly
发布:Agile Java (http://www.agilejava.org),本文属于 JSF OpenDoc 系列,我们会努力贡献出更多更好的开放文档,来方便大家对 JSF 的学习和使用。
本文的主要内容:
“Web Tier to Go With Java EE 5”系列文章中,“JSF1.2新特性”是第一篇。就像在文中表述的一样,JSP技术的优势随着JSF技术的发展得到了进一步的扩大,这种优势是通过统一EL表达式建立起来的。统一JSP的框架也是JSF1.2技术中众多重要成绩之一,并在JSR252规范下进行开发。除了这些变化为,JSF技术还贡献了大量的重要的容易使用的特性。这篇文章简要的描述一些重要的基本特性,大概有如下几点:
􀁺 统一JSP技术
􀁺 改进自定义信息的支持
􀁺 提供状态保存特性
􀁺 能够关闭自动生成组件客户端ID
􀁺 新的setPropertyActionListener标签
《JavaServer Faces规范》的前言部分提供了一组完成的特性描述。
统一JSP技术 1
JSP和JSF技术相对立的核心是它们之间的页面生命周期的不同。在以前的文章中已经介绍了JSP规范,JSP规范指出:页面的元素被执行显示时,JSP支持单一的“渲染-响应”生命周期, 然后立即渲染页面。JSF的生命周期分成了多个阶段,当一个组件树被创建完毕,组件的数据就会被处理,然后组件被渲染并显示在页面上。然而,一个JSF页面并不需
要在执行后立即渲染。因此,在JSP页面上使用的JSF组件被渲染时,有时候并不是按照正常的顺序完成,而且会丢失组件的一些状态或者其他的问题产生。
这么文章涉及到JSP2.1的新特性。这里会从一下3个方面详细的介绍JSF技术的改进的地方:
􀁺 首先JSF组件支持JSTL的forEach标签
􀁺 改进tree组件创建方法和内容组织
􀁺 反对只使用JSF技术的EL,赞成使用统一的EL
首先JSF组件支持JSTL的forEach标签
就像在描述JSP技术新特性的文章中表述的一样,Java EE web层中的统一EL的一个新特性就是:迭代标签,例如JSTL的forEach能够在JSF组件中直接使用。例如,使用输入组件构建一个简单的表格,可以通过下列代码来实现:
<table>
<tr>
<th>Item Name</th>
<th>Item Price</th>
<th>Item Quantity</th>
</tr> <c:forEach var="item" items="#{shoppingCart.items}"> <tr> <td><h:outputText value="#{item.name}" /></td> <td><h:outputText value="#{item.price}" /></td> <td><h:inputText value="#{item.quantity}" /></td> </tr> </c:forEach> <h:commandButton value="update quantities" action="update" />
</table>
没有统一使用EL, 这几乎是不可能实现的。
改进tree组件创建方法和内容组织 2
在Hans Bergsten的《article about the use of JavaServer Faces technology with JSP pages》文中写到的,混合使用JSP代码和JSF标签有时候会产生预期不到的结果。例如,
在下面的代码中,JSF 组件outputText输出的文本内容“Hi”本来应该在文本内容“what’s your name?”前面显示:
<h:panelGroup> <h:outputText value="Hi. "/> What's your name? </h:panelGroup>
然而,这两行代码的输出是顺序是相反的。是什么导致了问题的发生?JSF的实现是以JSP的渲染引擎来渲染组件树的。因为JSP会立即执行并把静态文本内容放在response中,而<panelGroup>的子节点标签直到相应的结束标签</panelGroup>匹配后才会被渲染,所以“what’s your name?”就会在“Hi”之前显示了。
像这样的问题在Hans Bergsten的文中已经提到并在JSF1.2版本中得到了修改。解决方案包括:怎样改变组件树的创建、各种内容的处理和渲染等等。最重要的改变如下几点:
􀁺 创建和渲染组件树被分成2步,为了防止JSP引擎过早的渲染页面内容。
􀁺 所有的渲染器的rendersChildren属性值现在已经设计为“true”,目的时防止联合组件的内容在各自的组件内部分别渲染。
􀁺 标签内部的静态内容对应的渲染器的rendersChildren属性值设置为true,目的是获取并保存一个短暂的UIOutput组件并把该组件添加到组件树中。
􀁺 状态管理器从ViewTag中移到了ViewHandler中,为了防止write State在实际保存过程中被调用。
在接下来的“Web Tier to Go With Java EE 5”系列文章中会提供更多的关于描述组件树的创建和内容组织的细节,这就让JSF标签组件中使用JSP代码成为了可能。
反对只使用JSF的EL,赞成使用统一的EL
如本文前面的内容介绍,JSP和JSF的EL表达式会整合成统一的EL。这就意味着现在的JSF的EL是不推荐使用的。在介绍统一的EL前已经使用了JSF开发的应用,请务必做好具有向后兼容的工作。
3
然而,为了利用统一EL的特性,你可能需要改变原来自定应的组件和自定义的标签。要移植到统一EL,首先要把ValueBinding换成ValueExpression,把MethodBinding换成
MethodException。这些改变都相对的容易,而且还有更好的办法可以完成这些改变。例如,因为所有标准的标记属性都可以访问值表达式,你的标记处理程序不需要检测属性是可以接收、访问一个值表达式。
要了解更多关于如何移植到统一EL的内容,请参见文章“Unified Expression Language”(http://java.sun.com/products/jsp/reference/techart/unifiedEL.html)
改进易用性来支持自定义信息
JSF1.2技术的一个重要改进就是在JSF应用中增加自定义信息的能力。这个改进包括如下几个方面:
􀁺 一组新的标准转换信息
􀁺 对输入组件提供了新的属性:requiredMessage、converterMessage、validatorMessage
􀁺 为输入组件提供了新的label属性,允许组件的名字中包含错误信息
􀁺 提供新的资源绑定元素在应用中绑定资源
一组标准的转换器信息
以前的JSF给标准验证器提供了一组标准的错误信息。版本1.2增加了标注转换器提供了一组错误信息。要查看这些信息,请参考JSF1.2规范(http://jcp.org/en/jsr/detail?id=252)的第2.5.2.4节。
新属性:requiredMessage,converterMessage,validatorMessage
很多情况下,标准的错误提示信息很适合为我们的需要。如果不合适,我们可以使用自定义的信息来覆盖这些标准的信息,要完成个目的,就是通过输入组件的新属性requiredMessage、conv

[1] [2] [3]  下一页