【问题标题】:Difference between <h:inputXxx validator> attribute and <f:validator> tag<h:inputXxx validator> 属性和 <f:validator> 标签之间的区别
【发布时间】:2013-03-15 12:16:40
【问题描述】:

使用&lt;h:inputXxx validator&gt;属性和&lt;f:validator&gt;标签有什么区别?

<h:inputText ... validator="someValidator">
<h:inputText ...>
    <f:validator validatorId="someValidator" />               

我应该什么时候使用哪一个?

【问题讨论】:

  • 唯一明显的区别是validatorId for &lt;f:validator/&gt; 必须将Validator 的命名实例作为独立类引用。使用validator,您可以引用验证器的实例或实现validator method signature的方法

标签: validation jsf


【解决方案1】:

validator 属性允许您引用独立的托管 bean 方法,而不仅仅是像这样的验证器 ID:

<h:inputSomething validator="#{bean.validate}" />

在支持 bean 类中使用 validate(FacesContext context, UIComponent component, Object value) 方法,无需 Validator 实现。

&lt;f:validator&gt; 允许您在输入上注册多个验证器,而不仅仅是通过validator 属性注册一个。

使用哪一个取决于具体的功能要求。只需选择需要最少代码量的代码,这样您就可以得到干净的代码。

【讨论】:

  • 验证实际何时发生?值什么时候变化?如果是这样,value="true" 永远不会触发验证,对吧?
  • 显然总会发生。如果您打算仅监听值更改,请使用值更改监听器而不是验证器。
  • 这个例子来自previous answer of yours。我没有得到value=true 部分的重要性。
  • 这是一个完全不相关的问题,您在最初的问题中没有涉及。从您最初的问题来看,您从那里举了这个例子并不明显。在该示例中,它被用于触发验证,因为默认情况下空字段仅触发 required="true" 验证。
【解决方案2】:

假设我们这里有 Spring Configs。

然后在第一种情况下,“fooValidator”将是一个&lt;beanId&gt;,并且将调用相应的类(即验证器类)并进行验证。

在第二种情况下,应该类似于"#{someBean.validationMethod}"。在这种情况下,将调用验证方法。

第一个是好方法。因为在这种情况下,我们的验证器类扩展了 JSF 的默认 Validator 接口并实现了 validate() 方法。

第二个很好,如果你想自定义验证过程。

First 将在您的页面呈现时被调用,并且不太确定 second。但我认为,在渲染时也调用。

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2012-03-05
    • 2010-09-24
    • 2012-10-03
    • 2011-06-22
    • 2012-08-27
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多