我很困惑因为我的自定义必需验证没有被触发。 我有一个以编程方式创建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 ..."); ...
}
}
答案 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()
方法的断点开始应该提供见解。