Условное отображение компонентов JSF

79

Во-первых, я новичок в Java EE, у меня большой опыт разработки ASP .NET. Я просмотрел Интернет и мог пропустить это, но похоже, что нет простых и понятных руководств о том, как я мог бы подключить поддерживающий класс bean-компонента к компонентам JSF.

Хороший пример такой: в настоящее время я пытаюсь создать страницу JSF, где есть набор ссылок в виде строки меню и набора форм. Я планирую сделать следующее: при нажатии на ссылку будет отображаться определенная форма.

В ASP.NET я мог легко получить элемент, а затем установить атрибут для отображения. Мне интересно, есть ли простой способ (черт возьми, даже любой способ) сделать это в JSF.

Формы уже находятся на странице, это просто вопрос установки для атрибута «render» значения true, когда я нажимаю на конкретную ссылку.

Хайкал Нашуха
источник

Ответы:

158

Да, используйте renderedатрибут.

<h:form rendered="#{some boolean condition}">

Обычно вы привязываете его к модели, а не позволяете модели захватить компонент и манипулировать им.

Например

<h:form rendered="#{bean.booleanValue}" />
<h:form rendered="#{bean.intValue gt 10}" />
<h:form rendered="#{bean.objectValue eq null}" />
<h:form rendered="#{bean.stringValue ne 'someValue'}" />
<h:form rendered="#{not empty bean.collectionValue}" />
<h:form rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:form rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />

Обратите внимание на важность ключевых слов на основе операторов EL , таких как gt, ge, leи ltвместо того >, >=, <=и , <как угловые скобки <и >зарезервированы символы в XML. См. Также связанные вопросы и ответы: Ошибка синтаксического анализа XHTML: содержимое элементов должно состоять из правильно сформированных символьных данных или разметки .

Что касается вашего конкретного варианта использования, предположим, что ссылка передает параметр, как показано ниже:

<a href="page.xhtml?form=1">link</a>

Затем вы можете показать форму, как показано ниже:

<h:form rendered="#{param.form eq '1'}">

( #{param}это неявный объект EL, ссылающийся на Mapпредставление параметров запроса)

Смотрите также:

BalusC
источник
13

В дополнение к предыдущему посту у вас может быть

<h:form rendered="#{!bean.boolvalue}" />
<h:form rendered="#{bean.textvalue == 'value'}" />

JSF 2.0

Тоша Шах
источник
1
Столь небольшое дополнение не заслуживает отдельного ответа.
Карл Рихтер