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
。那么怎么了?我该如何解决?
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}" />
另请参阅:
- <c: 选择>不在数据表中工作
- JSTL c:如果没有';t在JSF h:dataTable中工作