小编典典

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

java

考虑以下 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 =地图

‘2’=键


题:

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

如果我在测试(test="true")中输入true,则显示“显示文本”。

可能<c:when>是在#{AuthMsgBean.rw['2'] ne null}表达式之前对标记求值了吗?

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


阅读 205

收藏
2020-09-28

共1个答案

小编典典

JSTL和JSF不会像您期望的那样同步运行。在JSF视图构建期间,它是JSTL,该JSTL从上到下首先运行以生成仅包含JSF标签的视图。在JSF视图渲染期间,正是JSF从上到下再次运行以生成一堆HTML。

显然,#{AuthMsgBean}轮到JSTL运行时,它不在范围内。当将标签放置在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']}" />
2020-09-28