如何在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