的facelet:
<h:dataTable value="#{item1.zapas}" var="item2" >
<h:column>
<h:outputText value="#{item2.hrac == null}"/>
<c:choose>
<c:when test="#{item2.hrac == null}">
<h:outputText value="X"/>
</c:when>
<c:when test="#{item2.hrac != null }">
<h:outputText value="#{item2.vysledok}"/>
</c:when>
</c:choose>
</h:column>
</h:dataTable>
输出:
trueX
falseX
falseX
trueX
item.hrac
有时是null
,有时不是null
,但在我选择它时仍然选择null
。那有什么不对?我该如何解决?
答案 0 :(得分:2)
JSTL标记和JSF标记不会像编码所期望的那样同步运行。 JSTL标记仅在JSF视图构建时运行,结果是仅包含JSF标记的树。 JSF标记仅在视图渲染时运行,结果是仅包含HTML元素的树。
当JSTL在视图构建期间运行时,范围内的#{item2}
不可用,因为JSF尚未在此时运行。
要解决此问题,您需要使用JSF rendered
属性。摆脱整个<c:choose>
块并放置以下内容:
<h:outputText value="X" rendered="#{item2.hrac == null}" />
<h:outputText value="#{item2.vysledok}" rendered="#{item2.hrac != null}" />