我的页面上有一些字段需要交叉验证。但我不希望此验证中的错误显示在<h:message>
这个字段中。
如果我向任何字段添加验证器,并且验证器抛出异常,则此字段的<h:message>
中会显示错误。另一方面,如果我想抑制页面提交,我必须抛出异常。仅显示一些错误消息是不够的。
所以我在表单上创建了一些隐藏字段,并在那里附加了验证器。此验证器可以访问我要验证的字段的UIComponents,因此它可以验证它们。当验证器抛出异常时,错误会在<h:message>
中显示隐藏字段,我可以放置在任何我想要的位置。
如果我在要验证的字段后放置隐藏字段,一切正常。 (如果我之前说过,在我的字段的UIComponents更新之前触发隐藏字段验证)。
问题在于它是讨厌的黑客:)有没有更好的方法呢?
答案 0 :(得分:3)
问题在于它是讨厌的黑客:)有没有更好的方法呢?
不适用于特定的功能要求。 JSF允许对多个字段进行交叉验证的细粒度控制非常正确。
如果我在要验证的字段后放置隐藏字段,一切正常。 (如果我之前说过,在我的字段的UIComponents更新之前会触发隐藏字段验证。)
组件在验证过程中按顺序处理,因为它们出现在组件树中。如果您在某个时间点仍然需要处理UIInput
,那么您需要通过UIInput#getSubmittedValue()
获取提交的值。如果已经处理过,那么您需要通过UIInput#getValue()
获取提交的(并转换和验证的)值。
因此,如果在待验证组件之后将隐藏字段与验证器放在一起,则需要UIInput#getValue()
来获取值。如果隐藏字段是之前要验证的组件,那么您需要UIInput#getSubmittedValue()
来获取值。
答案 1 :(得分:0)
我有这个代码为我工作:
抛出新的ValidatorException(new ArrayList());
没有显示错误。