症状とスクリーンショットは、 、、 、#{pollInfo}
などの反復 UI コンポーネントの現在反復されている項目を が表していることを示唆しています。<ui:repeat>
<h:dataTable>
<p:tabView>
<p:dataTable>
JSTL タグは、ビューのビルド時、つまり JSF コンポーネント ツリーが XHTML ソース コードに基づいてビルドされる瞬間に実行されます。このvar
ような反復 UI コンポーネントの属性は、ビューのレンダリング時、つまり JSF コンポーネント ツリーに基づいて HTML 出力が生成される瞬間にのみ使用できます。
つまり、それらは「同期」して実行されません。は#{pollInfo}
常にnull
ビューのビルド時です。
rendered
この特定のケースでは、代わりにJSF コンポーネントの属性が必要です。
<h:outputText value="Active" rendered="#{pollInfo.active}" />
<h:outputText value="Deactive" rendered="#{not pollInfo.active}" />
または、より大きなコードを条件付きでレンダリングする場合は、すべてを次のようにラップします<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'}" />
追加のボーナスは、はるかに少ないコードで終わることです。
以下も参照してください。