问题c:标签时

时间:2011-07-03 20:49:38

标签: java jsf jstl

的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。那有什么不对?我该如何解决?

1 个答案:

答案 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}" />

另见: