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