Как выполнить проверку в JSF, как создать пользовательский валидатор в JSF
Я бы хотел, чтобы выполнить проверку в некоторых из моих входных компонентов, таких как <h:inputText>
используя некоторый метод Java bean. Должен ли я использовать <f:validator>
или <f:validateBean>
для этого? Где я могу прочитать больше об этом?
1 ответов
вам просто нужно использовать тег Validator
интерфейс.
@FacesValidator("myValidator")
public class MyValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
// ...
if (valueIsInvalid) {
throw new ValidatorException(new FacesMessage("Value is invalid!"));
}
}
}
на @FacesValidator
зарегистрирует его в JSF с идентификатором валидатора myValidator
, так что вы можете ссылаться на него в любой <h:inputXxx>
/<h:selectXxx>
компонент следующим образом:
<h:inputText id="foo" value="#{bean.foo}" validator="myValidator" />
<h:message for="foo" />
вы также можете использовать <f:validator>
, что было бы единственным способом, если вы собираетесь прикрепить несколько валидаторов к одному компоненту:
<h:inputText id="foo" value="#{bean.foo}">
<f:validator validatorId="myValidator" />
</h:inputText>
<h:message for="foo" />
когда валидатор бросает!--12-->, то его сообщение будет отображаться в элементе <h:message>
связан с полем ввода.
можно использовать <f:validator binding>
для ссылки на конкретный экземпляр валидатора где-то в области EL, который, в свою очередь, может быть легко предоставлен как лямбда:
<h:inputText id="foo" value="#{bean.foo}">
<f:validator binding="#{bean.validator}" />
</h:inputText>
<h:message for="foo" />
public Validator getValidator() {
return (context, component, value) -> {
// ...
if (valueIsInvalid) {
throw new ValidatorException(new FacesMessage("Value is invalid!"));
}
};
}
чтобы сделать шаг дальше, вы можете использовать проверку jsr303 bean. Это проверяет поля на основе аннотаций. Поскольку это будет целая история, вот только некоторые ссылки, чтобы получить начал:
на <f:validateBean>
полезно только если вы намереваетесь отключить проверка бобов JSR303. Затем вы помещаете входные компоненты (или даже всю форму) внутрь <f:validateBean disabled="true">
.