2015-06-08 4 views
1

Я пытаюсь использовать фреймворк javax.validation для всех потребностей проверки веб-приложения. Для этого мне нужно написать некоторые валидаторы, которые будут проверять основной объект. Например, предположим, что у моего объекта есть startDate и endDate, и мне нужно проверить, чтобы startDate не был больше, чем endDate. Или любой другой сценарий, когда проверка одного поля зависит от содержимого другого поля внутри основного объекта.Доступ к основному объекту в javax.validation.ConstraintValidator

Мой вопрос: как мне добраться до этих других полей или от самого главного объекта от валидатора. У меня есть чувство, что я могу добраться до него через constraintValidatorContext, но пока не понял, как это сделать.

Я использую следующие для написания пользовательских валидаторы: https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html

Является ConstraintValidator даже правильный инструмент для работы здесь? В принципе, моя конечная цель, чтобы все проверки случаются, просто пробегаю по валидаторам, как это:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<MyClass>> violations = validator.validate(myObject); 

    for(ConstraintViolation<MyClass> validation : violations) 
    { 
     // put error message in a collection to display in the jsp 
    } 

И не целая строка, если/ELSES или попытаться/уловами в методе валидации, которые проверяют каждое поле.

Кроме того, мой проект не использует никаких фреймворков, таких как Hybernate или Spring, и я не могу их интегрировать в этот момент. Это всего лишь стандартный проект Servlet/jsp.

ответ

2

Если валидатор должен одновременно проверять два связанных поля объекта, он должен проверять сам объект, а не одно поле объекта. И соответствующая аннотация должна быть в классе, а не в поле класса.