JSF 2.0 Validator Wrapping

时间:2011-09-16 10:05:49

标签: jsf

当我尝试将自定义验证器应用于输入字段时,我遇到了问题:

我想使用由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中,对吗? “对所有儿童成分”意味着什么?孩子的成分是什么?

1 个答案:

答案 0 :(得分:1)

  

此异常的原因是什么?

我不确定。 Mojarra 2.1.3和MyFaces 2.1.1都暴露了同样的问题。当验证程序是由@FacesValidator("myValidator")指定的独立<f:validator validatorId="myValidator">类时,它可以工作。 specvdl描述了此行为。您可能希望向JSF规范人员发布issue report以在规范或vdl中更多地阐明这一点。


  

另外,我不明白相应的f:validator标签规范:

     

如果此元素嵌套在具有其他UIComponent子元素的UIComponent标记内,则验证器将自动添加到所有子组件以及此组件。

     

我想我的f:validator标签嵌套在f:view中,对吗? “对所有儿童成分”意味着什么?儿童成分是谁?

这只是一个可怕的措辞,无论你想要实现什么,只是支持:将一个通用的验证器包装在一组组件上。您可能想要让JSF规范人员更多地澄清这一点。