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

标签 validation jsf jsf-2

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

如果我将验证器添加到任何字段,并且验证器抛出异常,错误将显示在 <h:message> 中对于这个领域。另一方面,如果我想禁止页面提交,我必须抛出异常。仅显示一些错误消息是不够的。

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

如果我将隐藏字段放在我想要验证的字段后面,一切都会正常。 (如果我把它放在前面,隐藏字段验证会在更新我的字段的 UIComponent 之前触发)。

问题是它是令人讨厌的黑客:)有更好的方法吗?

最佳答案

The problem is it's nasty hack :) Is there some better way to do it?

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

Everything works, if I put hidden field after the fields I want to validate. (If I put it before, hidden field validation is triggered before even UIComponents of my fields are updated).

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

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

关于validation - 在 JSF 中验证字段并抛出异常,但将错误消息附加到另一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439716/

相关文章:

javascript - 在 JavaScript 中从支持 bean 迭代列表

jsf - 使用复合组件将列添加到 Primefaces PanelGrid

java - Apache HTTP Server 背后的 Glassfish Server Webservice

java - 从 JSF 中的数据表获取选定行数据

jsf-2 - Primefaces 重新排序包含输入的行

asp.net - ASP.NET 服务器端或客户端的验证控件?

validation - Spring 3 - 在jsp 中访问messages.properties

javascript - javascript表单验证库推荐

java - EJB/JSF java.lang.ClassNotFoundException : com. ericsantanna.jobFC.dao.DAOFactoryRemote 来自本地模块加载器的 [模块 "com.sun.jsf-impl:main"]

jquery - 欧芹自定义动态错误消息