CustomRequiredvalidator没有被触发



我很困惑,因为我自定义所需的验证没有被触发。我有一个类,创建我的HtmlTextInput元素编程和添加验证器。此外,我还得到了自定义验证器类。控制台告诉我validators被绑定到HtmlTextInput。不管怎样,在点击保存之后CustomRequiredValidator没有被调用!我使用的是JSF 2.x。由于进步。

// programmatically built HtmlInput-element
if (freeText.isRequired()) {
    // Validator-Objekt
    System.out.println("CustomRequiredValidator bound.");
    final CustomRequiredValidator validator = (CustomRequiredValidator) FacesContext.getCurrentInstance().getApplication().createValidator("CustomRequiredValidator");
    inputText.addValidator(validator);
}
// CustomValidator
@FacesValidator("CustomRequiredValidator")
public class CustomRequiredValidator implements Validator {
    @Override
    public void validate(FacesContext context, UIComponent uiComponent, Object value) throws ValidatorException {
        System.out.println("RequiredValidator.validate ..."); ...
    }
}

只有在转换成功时才调用验证器。因此,如果存在显式注册或隐式使用的转换器(例如,拥有Integer bean属性将触发JSF内置的IntegerConverter),并且它抛出了ConverterException,那么验证器将永远不会被触发。但是,您应该在任何相关的<h:message(s)>组件或服务器日志中注意到此转换器异常。

如果转换器被排除在嫌疑之外,那么另一个可能的原因是JSF被配置为不通过在webapp的web.xml中具有以下上下文参数来验证空字段:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

除此之外,运行一个调试器,从UIInput#validate()方法的断点开始,应该会给你一些启示。

相关内容

  • 没有找到相关文章

最新更新