【问题标题】:Validate field and throw exception in JSF, but attach error message to another field?在 JSF 中验证字段并抛出异常,但将错误消息附加到另一个字段?
【发布时间】:2010-12-14 13:35:45
【问题描述】:

我的页面上有一些需要交叉验证的字段。但我不希望在 <h:message> 中针对该字段显示此验证中的错误。

如果我将验证器添加到任何字段,并且验证器引发异常,则该字段的 <h:message> 中会显示错误。另一方面,如果我想禁止提交页面,我必须抛出异常。仅仅显示一些错误信息是不够的。

所以我在表单上创建了一些隐藏字段,并在那里附加了验证器。此验证器可以访问我要验证的字段的 UIComponent,因此它可以验证它们。当验证器抛出异常时,<h:message> 中显示隐藏字段的错误,我可以将其放置在我想要的任何位置。

如果我在要验证的字段之后放置隐藏字段,一切正常。 (如果我之前提到,隐藏字段验证会在我的字段的 UIComponents 更新之前触发)。

问题是它很讨厌 :) 有更好的方法吗?

【问题讨论】:

    标签: validation jsf jsf-2


    【解决方案1】:

    问题是它很讨厌 :) 有更好的方法吗?

    不适用于特定的功能要求。确实,JSF 允许对多个字段的交叉验证进行极少的细粒度控制。

    如果我在要验证的字段之后放置隐藏字段,一切正常。 (如果我之前提到过,隐藏字段验证会在我的字段的 UIComponents 更新之前触发)。

    组件在验证阶段按照它们在组件树中出现的顺序进行处理。如果您手头有一个UIInput 尚待处理,那么您需要通过UIInput#getSubmittedValue() 获取提交的值。如果它已经被处理,那么您需要通过UIInput#getValue() 来获取提交(并转换和验证)的值。

    因此,如果您将带有验证器的隐藏字段放在待验证组件之后,那么您需要UIInput#getValue() 来获取值。如果隐藏字段放在待验证组件之前,那么你需要UIInput#getSubmittedValue() 来获取值。

    【讨论】:

    • 好的,看来我仍然需要隐藏字段来验证其他字段。感谢“getSubmittedValue()”提示!
    【解决方案2】:

    我有这个代码为我工作:

    抛出新的ValidatorException(new ArrayList());

    没有显示错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 2011-09-21
      • 1970-01-01
      • 2011-02-03
      • 2019-04-28
      • 2020-10-23
      • 2014-03-26
      • 1970-01-01
      相关资源
      最近更新 更多