当不在JSF页面中工作时,选择c:

  • 本文关键字:选择 工作 JSF java jsf jstl
  • 更新时间 :
  • 英文 :


考虑以下jstl选择:

<c:choose>
    <c:when test="#{AuthMsgBean.rw['2'] ne null}">
        Display Text
    </c:when>
    <c:otherwise>
        <ph:outputText id="pan" value="Component pan could not be created." />
    </c:otherwise>
</c:choose>

AuthMsgBean = Bean

rw = Map

'2' = Key


问题:

当我简单地显示#{AuthMsgBean.rw['2'] ne null}值时,它显示fine (true),但是一旦我尝试将值解析为<c:when test=""/>时,When标记的反应就好像测试始终为false。

如果我在测试(test="true")中设置为true,则显示文本。

是否<c:when>标签在#{AuthMsgBean.rw['2'] ne null}表达式之前求值?

如果是,是否有解决方法?

JSTL和JSF不像您期望的那样同步运行。在JSF视图构建期间,JSTL首先从上到下运行,以生成只有JSF标记的视图。在JSF视图呈现期间,是JSF再次从上到下运行以生成一堆HTML。

显然,轮到JSTL运行时,#{AuthMsgBean}不存在于作用域中。当标签被放置在JSF迭代组件(如<h:dataTable>)中时,就会发生这种情况。

无论如何,您都不想在这里使用JSTL。使用JSF的rendered属性。

<h:panelGroup rendered="#{not empty AuthMsgBean.rw['2']}">
    Display Text
</h:panelGroup>
<h:outputText id="pan" value="Component pan could not be created." rendered="#{empty AuthMsgBean.rw['2']}" />

参见:

  • 有条件地显示JSF组件

相关内容

  • 没有找到相关文章

最新更新