2012-02-12 2 views
0

내가 문자열 ID의 "참조 목록"에 대해 검증하고자 빈에서 문자열-아이디의 목록을 람 시간에 을 확인하십시오. (런타임에 데이터베이스에서 읽거나 생성 된 이러한 참조 ID). 이것은 웹 응용 프로그램 (Struts)이며 이것이 왜 가능하지 않은지 궁금합니다.하지만 백만 건의 ob 웹 응용 프로그램에 널리 퍼져있는 유스 케이스입니다. 어떻게 이것을 해결합니까?JSR303 유효성 검사 : 런타임에 객체/컨텍스트 정보를 전달 하시겠습니까?</p> <pre><code>@MyIdListValidator private List<String> idsFromHtmlForm; //These need to be validate against an ID list from DB </code></pre> <p>그래서 나는 모든 유효한 값으로 "참조 목록"을 주입 somewho해야 :

validator.validate(form); 

방법 (컨텍스트 개체)에 임의의 정보를 주입하거나 어떤 방법이 있는가?

그리고 개체를이 방법으로 검증되는 전체에 대한 액세스를 얻을 수있는 가장 쉬운 방법 (!)가 : ConstraintValidator<Date,String>,

public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) : 내 질문은 클래스 레벨의 검증과 관련이 없습니다가, 속성 자체의 가치뿐만 아니라 전체 개체 (속성이 속한)에 대한 액세스를 얻는 트릭이있는 경우 속성 수준의 유효성 검사가 수행됩니다. (만약 내가 전체 인스턴스에 액세스 할 수/유효성이 클래스는 내가 거기에 데이터를 설정할 수있는 보조 poperty, 지저분하지만 해결책이 될 것입니다).

대단히 감사합니다.

답변

2

Bean 유효성 검사가 불가능합니다. 클래스 레벨 제한 조건 만 유효성 검증 루틴에 액세스 할 수 있습니다. 속성 수준 제약 조건은 유효성이 검사 된 값에만 액세스 할 수 있습니다. 이것은 Bean Validation 1.1에서 변경 될 수 있습니다.

주입을 허용하는 사용자 지정 ConstraintValiatorFactory를 작성할 수 있습니다.