为了账号安全,请及时绑定邮箱和手机立即绑定

JSTLc:如果JSFh:dataTable内部不工作

JSTLc:如果JSFh:dataTable内部不工作

倚天杖 2019-07-12 15:17:42
JSTLc:如果JSFh:dataTable内部不工作我试着用<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>但这是行不通的,为什么要这样,我怎么才能解决呢?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

JSTL标记是在视图构建过程中评估的,而不是在视图呈现过程中评估的。您可以将其可视化如下:每当第一次创建视图树时,将执行所有JSTL标记,其结果是只包含JSF组件的视图。每当呈现视图树时,都会执行所有JSF组件,结果是HTML。因此:JSF+JSTL并不像您期望的那样同步运行。JSTL首先从上到下运行,然后将结果交给JSF,然后再从上到下运行JSF。这可能会导致像UIData这样的JSF迭代组件的意外结果,因为行数据(在您的特殊情况下)#{item}对象)是在JSTL运行时可用。

简而言之:使用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>

另见:


查看完整回答
反对 回复 2019-07-12
  • 1 回答
  • 0 关注
  • 435 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信