当我尝试将自定义验证器应用于输入字段时,我遇到了问题:
我想使用由bean生成并绑定到f:validator标记的自定义验证器:
<f:validator binding="#{bean.myValidator}">
相应的bean方法如下所示:
public Validator getMyValidator(){
return new Validator(){...};
}
如果我在输入标签中使用这样的标签:
<h:input value="...">
<f:validator binding="#{bean.myValidator}" />
</h:input>
然后一切都按预期工作。
但是,如果我像这样使用标签:
<f:validator binding="#{bean.myValidator}">
<h:input value="...">
</f:validator>
然后我得到一个ServletException(“validatorID为null”)。
此异常的原因是什么?
另外,我不理解相应的f:validator tag spec:
如果此元素嵌套在具有其他UIComponent子元素的UIComponent标记内,则验证器将自动添加到所有子组件以及此组件。
我想我的f:validator标签嵌套在f:view中,对吗? “对所有儿童成分”意味着什么?孩子的成分是什么?
答案 0 :(得分:1)
此异常的原因是什么?
我不确定。 Mojarra 2.1.3和MyFaces 2.1.1都暴露了同样的问题。当验证程序是由@FacesValidator("myValidator")
指定的独立<f:validator validatorId="myValidator">
类时,它可以工作。 spec和vdl描述了此行为。您可能希望向JSF规范人员发布issue report以在规范或vdl中更多地阐明这一点。
另外,我不明白相应的f:validator标签规范:
如果此元素嵌套在具有其他UIComponent子元素的UIComponent标记内,则验证器将自动添加到所有子组件以及此组件。
我想我的f:validator标签嵌套在f:view中,对吗? “对所有儿童成分”意味着什么?儿童成分是谁?
这只是一个可怕的措辞,无论你想要实现什么,只是支持:将一个通用的验证器包装在一组组件上。您可能想要让JSF规范人员更多地澄清这一点。