CustomRequiredvalidator未被触发

时间:2013-04-05 09:55:31

标签: validation jsf

我很困惑因为我的自定义必需验证没有被触发。 我有一个以编程方式创建HtmlTextInput元素的类并添加 验证者。此外,我得到了自定义验证器类。控制台告诉我 验证器绑定到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 ..."); ...
    }
}

1 个答案:

答案 0 :(得分:0)

仅在转换成功时才会调用验证程序。因此,如果有转换器,显式注册或隐式使用(例如,具有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()方法的断点开始应该提供见解。