Только пусть атрибут required
зависит от его результата от наличия других полей ввода в карте параметров запроса.
<h:form id="form">
<h:inputText id="input1" value="#{bean.input1}" required="#{empty param['form:input2'] and empty param['form:input3']}" />
<h:inputText id="input2" value="#{bean.input2}" required="#{empty param['form:input1'] and empty param['form:input3']}" />
<h:inputText id="input3" value="#{bean.input3}" required="#{empty param['form:input1'] and empty param['form:input2']}" />
</h:form>
В качестве альтернативы можно также использовать компоненты связывания и использовать UIInput#getValue()
для проверки значения предыдущих компонентов и UIInput#getSubmittedValue()
, чтобы проверить их на еще-быть апробированы компоненты (компоненты обрабатываются в порядке, как они появляются в дереве компонентов). Таким образом, вам не нужно жестко кодировать идентификаторы клиентов. Вам нужно только убедиться, что имена привязок не конфликтуют с существующими именами управляемых компонентов.
<h:form>
<h:inputText binding="#{input1}" required="#{empty input2.submittedValue and empty input3.submittedValue}" />
<h:inputText binding="#{input2}" required="#{empty input1.value and empty input3.submittedValue}" />
<h:inputText binding="#{input3}" required="#{empty input1.value and empty input2.value}" />
</h:form>