проблема с тегом c: когда - PullRequest
2 голосов
/ 04 июля 2011

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 Ответ

2 голосов
/ 04 июля 2011

Теги 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}" />

См. Также:

...