在JSF中验证字段并抛出异常,但是将错误消息附加到另一个字段?

时间:2010-12-14 13:35:45

标签: validation jsf jsf-2

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

如果我向任何字段添加验证器,并且验证器抛出异常,则此字段的<h:message>中会显示错误。另一方面,如果我想抑制页面提交,我必须抛出异常。仅显示一些错误消息是不够的。

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

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

问题在于它是讨厌的黑客:)有没有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

  

问题在于它是讨厌的黑客:)有没有更好的方法呢?

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

  

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

组件在验证过程中按顺序处理,因为它们出现在组件树中。如果您在某个时间点仍然需要处理UIInput,那么您需要通过UIInput#getSubmittedValue()获取提交的值。如果已经处理过,那么您需要通过UIInput#getValue()获取提交的(并转换和验证的)值。

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

答案 1 :(得分:0)

我有这个代码为我工作:

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

没有显示错误。