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

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

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> который помещается после обоих компонентов и помещает туда валидатор.

Другие вопросы по тегам