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

МетодОписание
String getMessage()Возвращает интерполированное сообщение об ошибке для данного нарушения
String getMessageTemplate()Возвращает неинтерполированное сообщение об ошибке
T getRootBean()Возвращает корневой компонент, участвующий в валидации
Class 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;

• Validator под java: comp/Validator.

Затем вы можете искать эти JNDI-имена и получать экземпляры Validator. Но вместо поиска экземпляров через JNDI вы можете запросить, чтобы они были внедрены с помощью аннотации @Resource:

@Resource ValidatorFactory validatorFactory;

@Resource Validator validator;

Если ваш контейнер использует CDI (а это происходит в Java EE 7 по умолчанию), то он должен допускать внедрение с помощью @Inject:

@Inject ValidatorFactory;

@Inject Validator;

В любом случае (как с @Resource, так и с @Inject) контейнер следит за жизненным циклом фабрики. Поэтому вам не придется вручную создавать или закрывать ValidatorFactory.

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

Как только вы получите Validator программно или путем внедрения, можете использовать его методы как для валидации целого компонента, так и для работы с отдельно взятым свойством. В листинге 3.21 показан класс CD, в котором действуют ограничения, связанные со свойствами, параметрами методов и возвращаемым значением.

Листинг 3.21. Компонент с ограничениями, применяемыми со свойствами и методами

public class CD {

··@NotNull @Size(min = 4, max = 50)

··private String title;

··@NotNull

··private Float price;

··@NotNull(groups = PrintingCatalog.class)

··@Size(min = 100, max = 5000, groups = PrintingCatalog.class)

··private String description;

··@Pattern(regexp = "[A-Z][a-z]{1,}")

··private String musicCompany;

··@Max(value = 5)

··private Integer numberOfCDs;

··private Float totalDuration;

··@NotNull @DecimalMin("5.8")

··public Float calculatePrice(@DecimalMin("1.4") Float rate) {

····return price * rate;

··}

··@DecimalMin("9.99")

··public Float calculateVAT() {

····return price * 0.196f;

··}

}

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

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

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

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

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

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

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

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

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