Проверка входного текста на основе выбора выпадающего списка

Как я могу проверить текстовое поле ввода на основе выделения из раскрывающегося списка?

Ответ 1

Вы можете передать выбранное значение выпадающего списка в качестве атрибута входного компонента, чтобы он мог его захватить.

например.

<h:selectOneMenu binding="#{menu}" value="#{bean.item}">
    <f:selectItems value="#{bean.items}" />
</h:selectOneMenu>
<h:inputText value="#{bean.input}">
    <f:attribute name="item" value="#{menu.value}" />
    <f:validator validatorId="inputValidator" />
</h:inputText>

с

@FacesValidator("inputValidator")
public class InputValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) {
        Object item = component.getAttributes().get("item");
        // ...
    }

}

Обратите внимание, что имеет место упорядочение компонентов. JSF обрабатывает компоненты UIInput в том порядке, в котором они отображаются в представлении. Если выпадающий компонент размещен после текстового компонента ввода, вам необходимо передать атрибут #{menu.submittedValue} в качестве атрибута, но в этот момент значение еще не преобразуется. Вы могли бы при необходимости обходным путем с <h:inputHidden>, который помещается после обоих компонентов и помещает там валидатор.