2010-12-14 38 views
2

我在我的页面上有一些我想交叉验证的字段。但我不希望此验证的错误显示在此字段的<h:message>中。验证字段并在JSF中抛出异常,但将错误消息附加到另一个字段?

如果我将验证程序添加到任何字段,并且验证程序引发异常,则此字段的错误显示在<h:message>中。另一方面,如果我想抑制页面提交,我必须抛出异常。只显示一些错误信息是不够的。

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

一切工作,如果我把隐藏的领域后,我想验证的领域。 (如果我把它放在前面,即使我的字段的UIComponent被更新也会触发隐藏字段验证)。

问题是这是讨厌的黑客:)有没有更好的方法来做到这一点?

回答

3

问题是它的讨厌的破解:)有没有更好的方法来做到这一点?

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

一切正常,如果我把隐藏的领域后,我想验证的领域。 (如果我把它放在前面,即使我的字段的UIComponent被更新也会触发隐藏字段验证)。

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

因此,如果您将隐藏域与验证器之后的作为待验证组件,那么您需要UIInput#getValue()来获取这些值。如果隐藏字段之前需要验证的组件,那么您需要UIInput#getSubmittedValue()来获取值。

+0

好吧,看起来我仍然需要隐藏字段来验证其他字段。感谢您的“getSubmittedValue()”提示! – amorfis 2010-12-14 21:24:39

+0

不客气。 – BalusC 2010-12-14 21:27:35

0

我有此代码为我工作:

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

没有显示错误。

相关问题