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

ОграничениеПриемлемые типыОписание
AssertFalseBooleanАннотированный элемент должен возвращать значение true или false
AssertTrue
DecimalMaxBigDecimal, BigInteger, CharSequence, byte, short, int, long и соответствующие оберткиЭлемент должен быть меньше или больше указанного значения
DecimalMin
FutureCalendar, DateАннотированный элемент должен быть датой в прошлом или будущем
Past
MaxBigDecimal, BigInteger, byte, short, int, long и их оберткиЭлемент должен быть меньше или больше указанного значения
Min
NullObjectАннотированный элемент должен быть равен или не равен нулю
NotNull
PatternCharSequenceЭлемент должен соответствовать указанному регулярному выражению
DigitsBigDecimal, BigInteger, CharSequence, byte, short, int, long и соответствующие оберткиАннотированный элемент должен быть числом в допустимом диапазоне
SizeObject[], CharSequence, Collection, MapРазмер элемента должен укладываться в указанные границы
<p>Определение собственных ограничений</p>

Как вы уже видели, API валидации компонентов предоставляет стандартные встроенные ограничения, но они вполне могут не удовлетворить всех нужд вашего приложения. Существует несколько способов создания собственных ограничений (от агрегирования уже имеющихся до написания нового ограничения с нуля). Есть разные стили выполнения такой работы (например, создание обобщенных ограничений или ограничений, действующих на уровне класса).

Объединение ограничений

Удобный способ создания новых ограничений — агрегирование (объединение) уже имеющихся. В таком случае мы обходимся без класса реализации. Это совсем не сложно сделать, если имеющиеся ограничения обладают @Target(ElementType.ANNOTATION_TYPE), то есть при работе с ними одна аннотация может быть применена к другой. Такой подход называется «объединением ограничений» и позволяет создавать высокоуровневые ограничения.

В листинге 3.5 показано, как создать ограничение Email, обходясь лишь встроенными ограничениями из API валидации компонентов. Это ограничение гарантирует, что адрес электронной почты является ненулевым (@NotNull), состоит не менее чем из семи символов (@Size(min = 7)) и соответствует сложному регулярному выражению (@Pattern). В таком объединенном ограничении также должны определяться атрибуты message, groups и payload. Обратите внимание: класс реализации здесь отсутствует (validatedBy = {}).

Листинг 3.5. Ограничение для работы с электронной почтой, составленное из других ограничений

@NotNull

@Size(min = 7)

@Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+ 

(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" 

········+ "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]* 

········[a-z0-9])?")

@Constraint(validatedBy = {})

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})

@Retention(RetentionPolicy.RUNTIME)

public @interface Email {

··String message() default "Неверный электронный адрес";

··Class[] groups() default {};

··Class[] payload() default {};

}

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

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

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

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

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

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

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

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

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