症状和屏幕截图表明#{pollInfo}
表示迭代 UI 组件的当前迭代项,例如<ui:repeat>
、 <h:dataTable>
、<p:tabView>
、<p:dataTable>
等。
JSTL 标记在视图构建期间运行,即基于 XHTML 源代码构建 JSF 组件树的时刻。这种迭代 UI 组件的var
属性仅在视图渲染期间可用,即基于 JSF 组件树生成 HTML 输出的那一刻。
换句话说,它们不会“同步”运行。#{pollInfo}
始终在null
视图构建期间。
在这种特殊情况下,您需要 JSF 组件的rendered
属性。
<h:outputText value="Active" rendered="#{pollInfo.active}" />
<h:outputText value="Deactive" rendered="#{not pollInfo.active}" />
或者,如果您打算有条件地渲染更大的代码片段,请将所有代码包装在 a 中<ui:fragment>
:
<ui:fragment rendered="#{pollInfo.active}">
<h:outputText value="Active" />
<!-- Some more components here if necessary. -->
</ui:fragment>
<ui:fragment rendered="#{not pollInfo.active}">
<h:outputText value="Deactive" />
<!-- Some more components here if necessary. -->
</ui:fragment>
鉴于您有一个纯 if-else,另一个选择是在 EL 中使用条件运算符:
<h:outputText value="#{pollInfo.active ? 'Active' : 'Deactive'}" />
额外的好处是,你最终得到的代码要少得多。
也可以看看: