- ·上一篇文章:简介JSF
- ·下一篇文章:JSF与Struts的比较
JSF1.2技术的新特性总结
,可以改为true),这样就表明可以不需要使用Form的ID作为组件ID的前缀了。下表格显示了正常情况下生成客户端组件ID的不同点:
Table 1:客户端组件ID生成情况
场景
prependId=rue
prependID=alse
开发人员没有设置ID
_id0:_id1
_id1
开发人员仅仅设置了form的ID
myForm:_id0
_id0
开发人员只设置组件ID
_id0:myComponent
myComponent
开发人员对form和组件都设置了ID
myForm:myComponent
myComponent
新标签setPropertyActionListener
除了actionListener标签之外,允许我们给自定义的组件注册一个Action Listener,核心的标记库现在已经包括在setPropertyActionListener标记中。用这个标记注册一个特定的action listener到ActionSource实例中,并与具体的组件关联起来。当组件被激活,listener就会把对象的引用存储到标记的属性中。
为了展示标记的用处,假设我们有一个forEach标记,并且在其中使用了commandButton,以及使用iterator来显示一组书的信息,代码如下:
8
<c:forEach items="#{bookDBAO.books}" var="book" varStatus="stat"> <c:set var="book" scope="request" value="${book}"/>
... <h:commandButton id="add" action="#{catalog.add}" value="#{bundle.CartAdd}"> <f:setPropertyActionListener target="#{requestScope.book}" value="#{book}"/> </h:commandButton> <c:remove var="book" scope="request"/> </c:forEach>
当用户点击button,选择的book就会增加到购物车中,并且显示下一页。
如果你熟悉JSTL,那你就直到forEach的var属性是在本页面那有效的。然而,book的数据需要在request范围内有效,这样显示页面(点击后转到的下一页面)才能范问到book的数据。因此,setPropertyActionListener标签通常用来把当前(book)对象设置为request访问范围内。
在这个例子中,setPropertyActionListener标签的value属性指的是“book”对象;target属性是表达式“requestScope.book”的引用,并且和commandButton组件建立了关联。
总结
这篇文章只是JSF1.2规范的简要说明,介绍一些新的特性和常见问题的解决方法。我们建议大家使用一下JSF1.2。如果你有一些问题或者看法,请发邮件(users@javaserverfaces.dev.java.net)给我们或者加入我们的社区(http://java.sun.com/j2ee/javaserverfaces)。同时,期待下一篇文章在我们的网站上出现。
更多信息 9
Web Tier to Go With Java EE 5: Summary of New Features in JSP 2.1 Technology, Part 1 in the series Web Tier to Go With Java EE 5: Summary of New Features in JSTL 1.2 Technology, Part 2 in the series JavaServer Faces Technology JSR 252: JavaServer Faces 1.2
10
JavaServer Pages Technology Hans Bergsten's article on the incompatibilities between the JSP and JavaServer Faces technologies Unified Expression Language Java Forums -- JavaServer Faces Technology Public IRC chat room: See Community heading
Table 1:客户端组件ID生成情况
场景
prependId=rue
prependID=alse
开发人员没有设置ID
_id0:_id1
_id1
开发人员仅仅设置了form的ID
myForm:_id0
_id0
开发人员只设置组件ID
_id0:myComponent
myComponent
开发人员对form和组件都设置了ID
myForm:myComponent
myComponent
新标签setPropertyActionListener
除了actionListener标签之外,允许我们给自定义的组件注册一个Action Listener,核心的标记库现在已经包括在setPropertyActionListener标记中。用这个标记注册一个特定的action listener到ActionSource实例中,并与具体的组件关联起来。当组件被激活,listener就会把对象的引用存储到标记的属性中。
为了展示标记的用处,假设我们有一个forEach标记,并且在其中使用了commandButton,以及使用iterator来显示一组书的信息,代码如下:
8
<c:forEach items="#{bookDBAO.books}" var="book" varStatus="stat"> <c:set var="book" scope="request" value="${book}"/>
... <h:commandButton id="add" action="#{catalog.add}" value="#{bundle.CartAdd}"> <f:setPropertyActionListener target="#{requestScope.book}" value="#{book}"/> </h:commandButton> <c:remove var="book" scope="request"/> </c:forEach>
当用户点击button,选择的book就会增加到购物车中,并且显示下一页。
如果你熟悉JSTL,那你就直到forEach的var属性是在本页面那有效的。然而,book的数据需要在request范围内有效,这样显示页面(点击后转到的下一页面)才能范问到book的数据。因此,setPropertyActionListener标签通常用来把当前(book)对象设置为request访问范围内。
在这个例子中,setPropertyActionListener标签的value属性指的是“book”对象;target属性是表达式“requestScope.book”的引用,并且和commandButton组件建立了关联。
总结
这篇文章只是JSF1.2规范的简要说明,介绍一些新的特性和常见问题的解决方法。我们建议大家使用一下JSF1.2。如果你有一些问题或者看法,请发邮件(users@javaserverfaces.dev.java.net)给我们或者加入我们的社区(http://java.sun.com/j2ee/javaserverfaces)。同时,期待下一篇文章在我们的网站上出现。
更多信息 9
Web Tier to Go With Java EE 5: Summary of New Features in JSP 2.1 Technology, Part 1 in the series Web Tier to Go With Java EE 5: Summary of New Features in JSTL 1.2 Technology, Part 2 in the series JavaServer Faces Technology JSR 252: JavaServer Faces 1.2
10
JavaServer Pages Technology Hans Bergsten's article on the incompatibilities between the JSP and JavaServer Faces technologies Unified Expression Language Java Forums -- JavaServer Faces Technology Public IRC chat room: See Community heading

