JSF:如何替换标准的Required Validator

时间:2014-10-27 09:41:54

标签: validation jsf jsf-2

我有很多代码需要标准的验证 像这样的东西

<h:inputText required="true" requiredMessage="it is required!"/>

现在,我需要更改RequiredValidator的行为:将错误消息放入上下文,但不要中断循环。可能是要做更多的事情。

我尝试添加具有相同ID的自定义验证程序,但它不起作用。

<validator>
    <validator-id>javax.faces.Required</validator-id>
    <validator-class>my.RequiredValidator</validator-class>
</validator>

有可能吗?

1 个答案:

答案 0 :(得分:0)

空字段未提交给验证程序。我找不到匹配的文档,但我测试了环境,请查看Get empty strings from <h:inputText> go through validation

这个问题也处理空字符串输入,BalusC说:

  

JSF 1.x默认不会在空字段上激活验证器。

好的,它是关于JSF 1.X的,但它似乎并没有改变。

验证器会中断请求,但这不是您想要的。那么根据您的需要使用setter方法可以解决这个问题吗?

忽略required中的inputText属性,并在textInput的setter中添加FacesMessage。假设确定值为#{myBean.description},则设置器可能如下所示:

public void setDescription(String value) {
    String _tmp = value.trim();
    if (_tmp.equals("")) {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR
            , "Error:", "Input must not be empty"));
        this.description = null;
        return;
    }
    this.description = _tmp;
}