Выбрать главу

Методы validate, validateProperty и validateValue используются соответственно для валидации целого компонента, свойства или свойства при заданном значении. Все методы принимают параметр varargs, позволяющий указывать группы для валидации. Метод forExecutables предоставляет доступ к ExecutableValidator для валидации методов, параметров конструктора и валидации возвращаемого значения. В табл. 3.5 описан API ExecutableValidator.

Таблица 3.5. Методы для интерфейса ExecutableValidator
Метод Описание
<T> Set<ConstraintViolation<T>>validateParameters(T object, Method Валидирует все ограничения, применяемые с параметрами метода
method, Object[] params, Class<?>… groups)
<T> Set<ConstraintViolation<T>>validateReturnValue(T object, Method method, Object returnValue, Class<?>… groups) Валидирует все ограничения возвращаемого значения, применяемые с методом
<T> Set<ConstraintViolation<T>>validateConstructorParameters (Constructor<T> constructor, Object[] params, Class<?>… groups) Валидирует все ограничения, связанные с параметрами конструктора
<T> Set<ConstraintViolation<T>>validateConstructorReturnValue (Constructor<T> constructor, T createdObject, Class<?>… groups) Валидирует все ограничения возвращаемых значений, связанные с конструктором
ConstraintViolation

Все валидационные методы, перечисленные в табл. 3.4 и 3.5, возвращают множество ConstraintViolation, которое можно перебирать и при этом просматривать, какие ошибки возникли при валидации. Если это множество пустое — значит, валидация прошла успешно. При ошибках в это множество добавляется по экземпляру ConstraintViolation для каждого нарушенного ограничения. ConstraintViolation описывает единую ошибку, связанную с ограничением, а его API дает множество полезной информации о причине ошибки. В табл. 3.6 сделан обзор этого API.

Таблица 3.6. Методы интерфейса ConstraintViolation
Метод Описание
String getMessage() Возвращает интерполированное сообщение об ошибке для данного нарушения
String getMessageTemplate() Возвращает неинтерполированное сообщение об ошибке
T getRootBean() Возвращает корневой компонент, участвующий в валидации
Class<T> getRootBeanClass() Возвращает класс корневого компонента, участвующего в валидации
Object getLeafBean() Возвращает дочерний компонент, к которому применяется ограничение
Path getPropertyPath() Возвращает путь свойств к значению от корневого компонента
Object getInvalidValue() Возвращает значение, которое не соответствует заданному ограничению
ConstraintDescriptor<?> getConstraintDescriptor() Возвращает метаданные об ограничении
Получение валидатора

Первый этап валидации компонента — приобрести экземпляр интерфейса Validator. Как и в большинстве спецификаций Java EE, вы можете либо получить Validator программно (если ваш код выполняется вне контейнера), либо внедрить его (если код выполняется в EJB- или веб-контейнере).

Если вы делаете это программно, то необходимо начать с класса Validation, осуществляющего начальную загрузку поставщика валидации компонентов. Его метод buildDefaultValidatorFactory строит и возвращает фабрику ValidatorFactory, которая, в свою очередь, используется для построения Validator. Код выглядит следующим образом:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

Validator validator = factory.getValidator();

Затем вам придется управлять жизненным циклом ValidatorFactory и программно закрывать его:

factory.close();

Если ваше приложение работает в контейнере Java EE, то контейнер должен предоставлять через JNDI следующие экземпляры:

• ValidatorFactory под java: comp/ValidatorFactory;