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