Требуемый атрибут входного текста должен зависеть от отправленного значения другого компонента
-
26-10-2019 - |
Вопрос
У меня есть форма, которая содержит раскрывающуюся спину и два поля ввода.
<h:selectOneMenu />
<h:inputText />
<h:inputText />
Я хотел бы сделать необходимый атрибут входных полей условными в зависимости от выбранного значения раскрывающегося списка. Если пользователь выбирает первый элемент раскрывающегося списка, то необходимо потребоваться поля ввода. Если пользователь выберет второй элемент, то это не потребуется.
Как я могу этого добиться?
Решение
Просто свяжите раскрывающийся список с представлением и напрямую проверьте его значение в 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
Пример как есть. Абсолютно не установите его на собственность бобов здесь. Смотрите также Как работает атрибут «привязки» в JSF? Когда и как это следует использовать?
Также обратите внимание, что упорядочение компонентов является значительным. Если меню расположено под входами в дереве, используйте #{menu.submittedValue eq 'first'}
вместо. Или если вы хотите быть независимым от этого, используйте #{param[menu.clientId] eq 'first'}
вместо.
Другие советы
Предполагая, что вы используете 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'}" />