Читаем Изучаем 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.

Валидация компонентов

Как только вы получите 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;

··}

}

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

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT