Канонический подход JSF для этого использует атрибут rendered
. Вот несколько примеров:
<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
Разница с тегами JSTL заключается в том, что атрибут rendered
оценивается во время визуализации представления, а теги JSTL выполняются во время сборки представления. См. Также JSTL в JSF2 Facelets ... имеет смысл?
Таким образом, если переменные, необходимые для оценки условия, имеют более узкую область видимости, чем область видимости (т. Е. Область запроса), то вместо этого следует использовать атрибут rendered
. Например, при повторной визуализации группы компонентов по запросу Ajax. Хотя JSTL-теги могут * одинаково хорошо работать в этом случае, они могут быть оценены «слишком рано» (т. Е. До того, как будет вызвано действие, которое, в свою очередь, могло бы изменить условия), и они также нарушали бы представление. объем. См. Также @ViewScoped
разрывы в обработчиках тегов .
Если переменные, необходимые для оценки условия, имеют более широкий охват, например в сеансе или в приложении или жестко закодированы в некотором шаблонном клиенте, тогда теги JSTL более эффективны, так как они будут оцениваться только во время построения представления, а не каждый раз во время отображения представления. См. Также Как создать сетку из составного компонента JSF?