【问题标题】:JSF 2.0 Validator WrappingJSF 2.0 验证器包装
【发布时间】:2011-11-18 13:49:37
【问题描述】:

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

我想使用由 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 is null")。

这个异常的原因是什么?

还有,没看懂对应的f:validator tag spec

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

我猜我的 f:validator 标记嵌套在 f:view 中,对吗? “对所有子组件”是什么意思?谁的子组件?

【问题讨论】:

    标签: jsf


    【解决方案1】:

    这个异常的原因是什么?

    我不确定。 Mojarra 2.1.3 和 MyFaces 2.1.1 都暴露了同样的问题。当验证器是由&lt;f:validator validatorId="myValidator"&gt; 指定的独立@FacesValidator("myValidator") 类时,它可以工作。 specvdl 描述了这种行为。您可能想向 JSF 规范人员发布 issue report 以在规范或 vdl 中对此进行更多说明。


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

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

    我猜我的 f:validator 标记嵌套在 f:view 中,对吗? “对所有子组件”是什么意思?谁的子组件?

    这只是支持您尝试实现的任何内容的糟糕措辞:将通用验证器包装在一组组件上。您可能还想请 JSF 规范人员进一步澄清这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-23
      • 2012-01-30
      • 2011-04-16
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多