ErV*_*VeY 19 datatable jsf jstl conditional-rendering
我试图在状态结束时<c:if>
有条件地放入一个<h:outputLink>
内部<h:dataTable>
.
<h:dataTable value="#{bean.items}" var="item" width="80%">
<h:column>
<f:facet name="header">
<h:outputText value="State" />
</f:facet>
<c:if test="#{item.state != 'Finish'}">
<h:outputText value="Missing value" />
</c:if>
<c:if test="#{item.state == 'Finish'}">
<h:outputLink value="myLink">
<h:outputText value="Value = #{item.state}" />
</h:outputLink>
</c:if>
</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,为什么会这样,我该如何解决?
Bal*_*usC 49
在构建视图期间评估JSTL标记,而不是在渲染视图期间评估.您可以按如下方式对其进行可视化:每当第一次创建视图树时,将执行所有JSTL标记,结果是仅包含JSF组件的视图.每当渲染一个视图树时,所有JSF组件都会被执行,结果就是HTML.所以:JSF + JSTL没有按照您对编码的期望同步运行.JSTL首先从上到下运行,将结果交给JSF,然后JSF再次从上到下运行.这可能会导致JSF迭代组件(如UIData)出现意外结果,因为在JSTL运行时行数据(在您的特定情况下为#{item}
对象)不可用.
简而言之:使用JSTL来控制JSF组件树构建的流程.使用JSF来控制HTML输出生成的流程.
您想在rendered
此处使用该属性.
<h:outputText value="Missing value" rendered="#{item.state ne 'Finish'}" />
<h:outputLink value="myLink" rendered="#{item.state eq 'Finish'}">
<h:outputText value="Value = #{item.state}" />
</h:outputLink>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27897 次 |
最近记录: |