0

我有一个 JSF 应用程序,我在一个名为isPasswordsEquals()的方法上使用@AssertTrue来确认密码匹配。但是,该方法似乎无法正常工作。它将错误消息添加到上下文中,但在密码不匹配时不会引发任何异常。正在进行的交易刚刚完成。

我需要调用这个函数还是隐式调用它?我为tomcat启动参数添加了-ea。我需要在 web.xml 中添加任何东西来进行断言吗?

我正在使用 tomcat 7、myfaces 2.1.10、jvm 7 和 eclipse ide。我的构建路径中有验证 api 1.0 和休眠验证器 4.3.1。

4

1 回答 1

0

首先,Java 断言与 Bean Validation 和@AssertTrue 之类的约束无关。它们是完全不同的东西。出于这个原因,使用 -ea JVM 选项不会做任何事情。

我的猜测是isPasswordEquals没有被评估,因为 JSF 实际上没有验证整个 bean,而是只通过Validator#validateValue 验证给定的属性。您的方法未连接到具体属性,因此未得到验证。验证是否适用于密码字段本身?例如,您是否可以向它们添加@NotNull@NotEmpty之类的内容,并且验证会引发异常。这将表明对属性进行了验证。

据我所知,没有办法在 JSF 中使用类级别的约束或对非属性值的约束。如果您使用 JPA,则必须自己进行验证调用,对实体管理器回调使用基于生命周期的验证。

于 2013-04-03T07:06:07.667 回答