c:when标记的问题



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中工作

相关内容

  • 没有找到相关文章

最新更新