【问题标题】:@AssertTrue Method not called when submitting JSF page@AssertTrue 提交 JSF 页面时未调用方法
【发布时间】:2013-03-14 11:00:04
【问题描述】:
我正在使用带有 hibernate-validator-4.2.0.Final 和 JSF 2.1 的 bean 验证。当我提交页面@NotEmpty, @NotNull,.. 工作正常,但我的方法,用@AssertTrue 注释从未被调用。
我将访问修饰符更改为public,将其重命名为getValid,但从未调用过该方法..
@AssertTrue(message = "test")
private Boolean isValid() {
return ....;
}
【问题讨论】:
标签:
java
jsf
assert
bean-validation
【解决方案1】:
JSF 不是通过Validator#validate 来验证一个完整的bean,而是为每个表单域调用Validator#validateValue。这是 isValid 表单域吗?
【解决方案2】:
问题在于,并非所有字段都经过 JSF 验证,只有我的 facelet 中的字段。
如果我打电话
SomeObject so = new SomeObject();
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<SomeObject>> violations = validator.validate(so);
在测试中,isValid 方法被触发。