【问题标题】:problem with c:when tagc:when 标签的问题
【发布时间】:2011-09-27 18:32:05
【问题描述】:

小脸:

<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。那么有什么问题呢?我该如何解决?

【问题讨论】:

    标签: java jsf jstl


    【解决方案1】:

    JSTL 标记和 JSF 标记不会像您对编码所期望的那样同步运行。 JSTL 标记仅在 JSF 视图构建期间运行,结果是只有 JSF 标记的树。 JSF 标记仅在视图呈现期间运行,结果是仅包含 HTML 元素的树。

    当在视图构建期间轮到 JSTL 运行时,#{item2} 在范围内不可用,只是因为 JSF 那时还没有运行。

    为了克服这个问题,您想使用 JSF rendered 属性来代替。摆脱整个 &lt;c:choose&gt; 块并将以下内容放在适当的位置:

    <h:outputText value="X" rendered="#{item2.hrac == null}" />
    <h:outputText value="#{item2.vysledok}" rendered="#{item2.hrac != null}" />
    

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多