解决方法
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
将使用验证器ID myValidator将其注册到JSF,以便您可以在任何< 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" />
只要验证器抛出ValidatorException,它的消息就会显示在< h:message>中.与输入字段相关联.
您可以使用< f:validator binding>在EL范围内的某处引用一个具体的验证器实例,这反过来可以很容易地作为lambda提供:
<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验证.这将根据注释验证字段.由于这将是一个完整的故事,这里只是一些入门链接:
> Hibernate Validator – Getting started
> JSF 2.0 tutorial – Finetuning validation
< f:validateBean>仅在您打算禁用JSR303 bean验证时才有用.然后将输入组件(甚至整个表单)放在< f:validateBean disabled =“true”>中.
也可以看看:
> JSF doesn’t support cross-field validation,is there a workaround?
> How to perform JSF validation in actionListener or action method?
原文地址:https://www.jb51.cc/java/127551.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。