JSF 1.x по умолчанию не запускает валидаторы на пустых полях. Для этого необходимо использовать атрибут required
. Если ваша конкретная проблема заключается в том, что второе поле должно быть установлено required
всякий раз, когда первое поле заполнено, то вам просто нужно проверить это в атрибуте required
.
<h:inputText value="#{bean.input1}" binding="#{input1}" />
<h:inputText value="#{bean.input2}" required="#{not empty input1.value}" />
Если это не функциональное требование, то вам следует уточнить это больше в вопросе, чтобы можно было дать более подходящий ответ.
Обновление : То есть вы хотите управлять потребностью модели? Добавьте Map<String, Boolean>
к компоненту следующим образом:
private Map<String, Boolean> required;
public Bean() {
required = new HashMap<String, Boolean>();
required.put("foo", true);
required.put("bar", false); // false entries are by the way not necessary.
// ...
}
public Map<String, Boolean> getRequired() {
return required;
}
Используйте его следующим образом:
<h:inputText id="foo" required="#{bean.required['foo']}" />
<h:inputText id="bar" required="#{bean.required['bar']}" />
Если бы вы использовали JSF 2.0, вы могли бы сделать это следующим образом
<h:inputText id="foo" required="#{bean.required[component.id]}" />
<h:inputText id="bar" required="#{bean.required[component.id]}" />
Вне зависимости от конкретной проблемы, ставить <h:message>
как дочерний элемент <h:inputText>
незаконно. Положите их рядом друг с другом.