Читаем Изучаем Java EE 7 полностью

Чтобы валидировать свойства целого компонента, мы просто должны создать экземпляр CD и вызвать метод Validator.validate(). Если экземпляр валиден, то возвращается пустое множество ConstraintViolation. В следующем коде показан валидный экземпляр CD (с заголовком и ценой), который и проверяется. После этого код удостоверяет, что множество ограничений действительно является пустым.

CD cd = new CD("Kind of Blue", 12.5f);

Set> violations = validator.validate(cd);

assertEquals(0, violations.size());

С другой стороны, следующий код вернет два объекта ConstraintViolation — один будет соответствовать заголовку, а другой — цене (оба они нарушают @NotNull):

CD cd = new CD();

Set> violations = validator.validate(cd);

assertEquals(2, violations.size());

<p>Валидация свойств</p>

В предыдущих примерах валидируются свойства целого компонента. Но существует метод Validator.validateProperty(), позволяющий проверять конкретное именованное свойство заданного объекта.

В показанном ниже коде создается CD — объект, имеющий нулевой заголовок и нулевую цену; соответственно, такой компонент невалиден. Но, поскольку мы проверяем только свойство numberOfCDs, валидация проходит успешно и мы получаем пустое множество нарушений ограничений:

CD cd = new CD();

cd.setNumberOfCDs(2);

Set> violations = validator.validateProperty(cd, "numberOfCDs");

assertEquals(0, violations.size());

С другой стороны, в следующем коде возникает нарушение ограничения, так как максимальное количество объектов CD должно равняться пяти, а не семи. Обратите внимание: мы используем API ConstraintViolation для проверки количества нарушений, интерполированного сообщения, возвращенного при нарушении, невалидного значения и шаблона сообщения:

CD cd = new CD();

cd.setNumberOfCDs(7);

Set> violations = validator.validateProperty(cd, "numberOfCDs");

assertEquals(1, violations.size());

assertEquals("must be less than or equal to 5", violations.iterator(). next(). getMessage());

assertEquals(7, violations.iterator(). next(). getInvalidValue());

assertEquals("{javax.validation.constraints.Max.message}",

·············violations.iterator(). next(). getMessageTemplate());

<p>Валидация значений</p>

Пользуясь методом Validator.validateValue(), можно проверять, удастся ли успешно валидировать конкретное свойство указанного класса при наличии у свойства заданного значения. Этот метод удобен при опережающей валидации, так как не требует даже создавать экземпляр компонента, заполнять или обновлять его значения.

Следующий код не создает объект CD, а просто ссылается на атрибут numberOfCDs класса CD. Он передает значение и проверяет, является ли свойство валидным (количество CD не должно превышать пяти):

Set> constr = validator.validateValue(CD.class, "numberOfCDs", 2);

assertEquals(0, constr.size());

Set> constr = validator.validateValue(CD.class, "numberOfCDs", 7);

assertEquals(1, constr.size());

<p>Валидация методов</p>

Методы для валидации параметров и возвращаемых значений методов и конструкторов вы найдете в интерфейсе javax.validation.ExecutableValidator. Метод Validator.forExecutables() возвращает этот ExecutableValidator, с которым вы можете вызывать validateParameters, validateReturnValue, validateConstructorParameters или validateConstructorReturnValue.

В следующем коде мы вызываем метод calculatePrice, передавая значение 1.2. В результате возникает нарушение ограничения, налагаемого на параметр: не выполняется условие @DecimalMin("1.4"). Для этого в коде сначала нужно создать объект java.lang.reflect.Method, нацеленный на метод calculatePrice с параметром типа Float. После этого он получает объект ExecutableValidator и вызывает validateParameters, передавая компонент, метод для вызова и значение параметра (здесь — 1.2). Затем метод удостоверяется в том, что никакие ограничения нарушены не были.

CD cd = new CD("Kind of Blue", 12.5f);

Method method = CD.class.getMethod("calculatePrice", Float.class);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных