我在 bean 中有一个字符串 ID 列表,我喜欢根据字符串 id 的“引用列表”进行验证:
@MyIdListValidator
private List<String> idsFromHtmlForm; //These need to be validate against an ID list from DB
因此,我必须以某种方式注入(inject)包含所有有效值的“引用列表”,以便在朗姆酒时间进行检查。 (这些引用 ID 在运行时从数据库读取/生成)。这是一个 Web 应用程序(Struts),我真的很想知道为什么这似乎不可能,但却是数百万个 Web 应用程序中普遍存在的用例。你如何解决这个问题?
是否有某种方法可以将任意信息(上下文对象)注入(inject) validator.validate(form);
方法?
有没有一种简单的方法可以访问在此方法中验证的整个(!!)对象:
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)
的ConstraintValidator<Date,String>,
注意:我的问题与类级别验证无关,而是与属性级别验证有关,如果有技巧可以访问整个对象(属性所属),而不仅仅是属性本身的值。 (如果我可以访问正在验证的整个实例/类,我可以将其中的数据设置为辅助属性,这很困惑,但将是一个解决方案)。
非常感谢
最佳答案
使用 Bean 验证这是不可能的。只有类级别约束才能访问验证根。属性级别约束只能访问经过验证的值。这在 Bean Validation 1.1 中可能会发生变化。
您可以编写允许注入(inject)的自定义 ConstraintValiatorFactory。
关于java - JSR 303 验证 : Pass in an Object/Context Information at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251671/