考虑以下 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一样。
#{AuthMsgBean.rw['2'] ne null}
<c:when test=""/>
如果我在测试(test="true")中输入true,则显示“显示文本”。
test="true"
可能<c:when>是在#{AuthMsgBean.rw['2'] ne null}表达式之前对标记求值了吗?
<c:when>
如果是这样,是否有解决方法?
JSTL和JSF不会像您期望的那样同步运行。在JSF视图构建期间,它是JSTL,该JSTL从上到下首先运行以生成仅包含JSF标签的视图。在JSF视图渲染期间,正是JSF从上到下再次运行以生成一堆HTML。
显然,#{AuthMsgBean}轮到JSTL运行时,它不在范围内。当将标签放置在JSF迭代组件(例如)中时,可能会发生这种情况<h:dataTable>。
#{AuthMsgBean}
<h:dataTable>
无论如何,您不想在这里使用JSTL。利用JSF rendered属性。
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']}" />