JSR303验证:在运行时传入对象/上下文信息?

时间:2012-02-12 18:57:30

标签: java validation bean-validation hibernate-validator

我在bean中有一个String-ID列表,我想根据字符串ID的“参考列表”进行验证:

@MyIdListValidator  
private List<String> idsFromHtmlForm;  //These need to be validate against an ID list from DB

因此,我必须向所有有效值注入“参考列表”以检查在朗姆酒时间。 (这些引用ID在运行时从数据库读取/生成)。这是一个Web应用程序(Struts),我真的很想知道为什么这似乎不可能,但它是一个在百万网络应用程序中流行的用例。你是怎么解决的?

是否有某种方法可以将任意信息(上下文对象)注入

validator.validate(form);

方法

是否有一种简单的方法可以访问在此方法中验证的整个(!!)对象:

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)

ConstraintValidator<Date,String>,

注意:我的问题与类级别验证无关,而是与属性级别验证有关,如果有一个技巧可以访问整个对象(属性属于),而不仅仅是属性的值。 (如果我可以访问正在验证的整个实例/类,我可以将数据设置为辅助属性,它的杂乱,但它将是一个解决方案)。

非常感谢

1 个答案:

答案 0 :(得分:2)

使用Bean验证是不可能的。只有类级别约束才能访问验证根。属性级别约束只能访问经过验证的值。这可能会在Bean Validation 1.1中发生变化。

您可以编写允许注入的自定义ConstraintValiatorFactory。