加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在JSF中执行验证,如何在JSF中创建自定义验证器

发布时间:2020-12-14 23:31:54 所属栏目:Java 来源:网络整理
导读:我想在我的一些输入组件中执行验证,例如 h:inputText使用一些 Java bean方法.我应该使用 f:validator或 f:validateBean为了这?我在哪里可以阅读更多相关信息? 解决方法 您只需要实现 Validator 接口. @FacesValidator("myValidator")public class MyVal
我想在我的一些输入组件中执行验证,例如< h:inputText>使用一些 Java bean方法.我应该使用< 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将使用验证器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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读