Проверка JSR303: передать информацию об объекте / контексте во время выполнения? - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть список String-ID в бине, который я хотел бы проверить по «Списку ссылок» с идентификаторами строк:

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

Так что мне нужно кое-кому добавить «Список ссылок» с помощьювсе действительные значения для проверки по в rumtime .(Эти ссылочные идентификаторы считываются / генерируются из базы данных во время выполнения).Это веб-приложение (Struts), и мне действительно интересно, почему это кажется невозможным, но это вариант использования, который распространен в миллионах веб-приложений.Как вы решаете это?

Есть ли какой-либо способ внедрить любую произвольную информацию (объекты контекста) в метод

validator.validate(form);

?

И есть ли простойспособ получить доступ ко всему объекту (!!), проверяемому в этом методе:

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) из ConstraintValidator<Date,String>,

Примечание. Мой вопрос не связан с проверками на уровне класса, нок проверке уровня свойства, если есть хитрость, чтобы получить доступ ко всему объекту (свойство принадлежит), а не только к значению самого свойства.(Если бы у меня был доступ ко всему проверяемому экземпляру / классу, я мог бы установить данные там как вторичную переменную, это грязно, но было бы решением).

Большое спасибо

1 Ответ

2 голосов
/ 13 февраля 2012

С валидацией бина это невозможно. Только ограничения уровня класса имеют доступ к корню проверки. Ограничение уровня свойства имеет доступ только к проверенному значению. Это может измениться в Bean Validation 1.1.

Вы можете написать свой собственный ConstraintValiatorFactory, который позволяет инъекцию.

...