规范的JSF方法是使用该rendered
属性.这里有些例子:
<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
Run Code Online (Sandbox Code Playgroud)
与JSTL标记的区别在于,rendered
在视图渲染时评估属性,而在视图构建期间执行JSTL标记.另请参阅JSF2 Facelets中的JSTL ......有意义吗?
因此,如果评估条件所需的变量具有比视图范围(即请求范围)更窄的范围,那么您应该使用rendered
属性.例如,在ajax请求时重新呈现一组组件时.虽然JSTL标签在这种情况下可以同样有效,但它们可能会"过早"评估(即在调用操作之前,这可能反过来又改变了条件),并且它们也会破坏视图范围.另请参见@ViewScoped
标记处理程序中的中断.
如果评估条件所需的变量具有更广泛的范围,例如会话范围或应用程序范围或在某些模板客户端中进行了硬编码,则JSTL标记更有效,因为它们仅在视图构建时间内进行评估,而不是每次都在评估期间进行评估.查看渲染时间.另请参见如何制作JSF复合组件的网格?
归档时间: |
|
查看次数: |
8038 次 |
最近记录: |