如何在JSF中执行validation,如何在JSF中创build自定义validation器
我想使用一些Java bean方法在我的一些input组件(如<h:inputText>
执行validation。 我应该使用<f:validator>
还是<f:validateBean>
? 我在哪里可以阅读更多关于它?
你只需要实现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
会将其注册到带有validation器ID myValidator
JSF,以便您可以按如下方式使用它:
<h:inputText id="foo" value="#{bean.foo}" validator="myValidator" /> <h:message for="foo" />
您也可以使用<f:validator>
,如果您打算在同一个组件上附加多个validation<f:validator>
,这将是唯一的方法:
<h:inputText id="foo" value="#{bean.foo}"> <f:validator validatorId="myValidator" /> </h:inputText> <h:message for="foo" />
每当validation器抛出一个ValidatorException
,那么它的消息将显示在与input字段关联的<h:message>
中。
为了更进一步,您可以使用JSR303 beanvalidation。 这validation基于注释的字段。 由于这将是一个完整的故事,这里只是一些开始的链接:
- Hibernatevalidation器 – 入门
- JSF 2.0教程 – Finetuningvalidation
<f:validateBean>
仅在打算禁用 JSR303 beanvalidation时才有用。 然后,将input组件(甚至整个表单)放在<f:validateBean disabled="true">
。
也可以看看:
- JSF不支持交叉字段validation,有没有解决方法?
- ActionListener或Action方法中的JSF 2.0validation