Симптомы и снимок экрана предполагают, что #{pollInfo}
представляет текущий повторяющийся элемент повторяющегося компонента пользовательского интерфейса, такого как <ui:repeat>
, <h:dataTable>
, <p:tabView>
, <p:dataTable>
и т. д.
Теги JSTL запускаются во время построения представления, в тот момент, когда дерево компонентов JSF строится на основе исходного кода XHTML. Атрибут var
такого повторяющегося компонента пользовательского интерфейса доступен только во время рендеринга просмотра, в тот момент, когда вывод HTML создается на основе дерева компонентов JSF.
Другими словами, они не работают синхронно. #{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'}" />
Дополнительным бонусом является то, что вы получаете гораздо меньше кода.
Смотрите также:
person
BalusC
schedule
09.12.2013