обязательный атрибут inputText должен зависеть от представленного значения другого компонента - PullRequest
5 голосов
/ 16 февраля 2012

У меня есть форма, которая содержит раскрывающийся список и два поля ввода.

<h:selectOneMenu />
<h:inputText />
<h:inputText />

Я хотел бы сделать обязательный атрибут полей ввода условным в зависимости от выбранного значения раскрывающегося списка. Если пользователь выбирает первый элемент раскрывающегося списка, то поля ввода должны быть обязательными. Если пользователь выбирает второй элемент, он не требуется.

Как мне этого добиться?

Ответы [ 2 ]

9 голосов
/ 16 февраля 2012

Просто привяжите выпадающий список к представлению и непосредственно проверьте его значение в атрибуте required.

<h:selectOneMenu binding="#{menu}" value="#{bean.item}">
    <f:selectItem itemValue="first" itemLabel="First item" />
    <f:selectItem itemValue="second" itemLabel="Second item" />
</h:selectOneMenu>

<h:inputText value="#{bean.input1}" required="#{menu.value eq 'first'}" />
<h:inputText value="#{bean.input2}" required="#{menu.value eq 'first'}" />

Обратите внимание, что пример binding "как есть". Не устанавливайте здесь свойство bean-компонента. См. Также Как работает атрибут 'binding' в JSF? Когда и как его следует использовать?

Также обратите внимание, что заказ компонентов имеет большое значение. Если меню расположено под входами в дереве, используйте #{menu.submittedValue eq 'first'}. Или, если вы хотите быть независимым от этого, используйте #{param[menu.clientId] eq 'first'}.

4 голосов
/ 16 февраля 2012

Предполагается, что вы используете JSF 2.0: пусть ваш SelectOneListBox выполнится с ajax и повторно отобразит поля ввода при изменении списка:

Быстрый набросок:

<h:selectOneMenu value="#{myBean.myMenuValue}">
  <f:ajax render="input1"/>
   ..
</h:selectOneMenu>

<h:inputText id="input1" value="#{myBean.myInputValue}" 
             required="#{myBean.myMenuValue == 'firstEntry'}" />
...