@AssertFalse
boolean isUnsupported;
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Модель Bean Validation поддерживается ограничениями в форме аннотаций, размещённых в поле, методе или классе компонента JavaBeans, такого как Managed-бин.
Ограничения бывают стандартными или могут быть заданы пользователем. Ограничения, заданные пользователем, называются пользовательскими ограничениями. Несколько предустановленных ограничений доступны в пакете javax.validation.constraints
. Таблица 23-1 перечисляет все предустановленные ограничения. Смотрите Создание пользовательских ограничений для получения информации о создании пользовательских ограничений.
Таблица 23-1. Предустановленные ограничения валидации бинов
Ограничение |
Описание |
Пример |
|
Значение поля или свойства должно быть |
|
|
Значение поля или свойства должно быть |
|
|
Значение поля или свойства должно быть десятичным числом, меньшим или равным числу в элементе value. |
|
|
Значением поля или свойства должно быть десятичным числом, большим или равным числу в элементе value. |
|
|
Значение поля или свойства должно быть числом в указанном диапазоне. Элемент |
|
|
Значение поля или свойства должно быть валидным адресом электронной почты. |
|
|
Значение поля или свойства должно быть датой в будущем. |
|
|
Значение поля или свойства должно быть датой или временем в настоящем или будущем. |
|
|
Значение поля или свойства должно быть целым числом, меньшим или равным числу в элементе value. |
|
|
Значение поля или свойства должно быть целым числом, большим или равным числу в элементе value. |
|
|
Значение поля или свойства должно быть отрицательным числом. |
|
|
Значение поля или свойства должно быть отрицательным числом или нулём. |
|
|
Значение поля или свойства должно содержать как минимум один символ, не являющийся пробелом. |
|
|
Значение поля или свойства не должно быть пустым. Вычисляется длина символов или массива, а также размер коллекции или отображения (Map). |
|
|
Значение поля или свойства не должно быть null. |
|
|
Значение поля или свойства должно быть null. |
|
|
Значение поля или свойства должно быть датой в прошлом. |
|
|
Значением поля или свойства должна быть дата или время в прошлом или настоящем. |
|
|
Значение поля или свойства должно соответствовать регулярному выражению, заданному в элементе |
|
|
Значение поля или свойства должно быть положительным числом. |
|
|
Значение поля или свойства должно быть положительным числом или нулём. . |
|
|
Размер поля или свойства вычисляется и должен соответствовать указанным границам. Если поле или свойство представляет собой |
|
В следующем примере на поле накладывается ограничение с использованием предустановленного ограничения @NotNull
:
public class Name {
@NotNull
private String firstname;
@NotNull
private String lastname;
...
}
Вы также можете разместить более одного ограничения на один объект компонента JavaBeans. Например, вы можете поместить дополнительное ограничение на размеры полей firstname
и lastname
:
public class Name {
@NotNull
@Size(min=1, max=16)
private String firstname;
@NotNull
@Size(min=1, max=16)
private String lastname;
...
}
В следующем примере показан метод с пользовательским ограничением, которое проверяет предварительно заданный шаблон телефонного номера, например номер телефона конкретной страны:
@USPhoneNumber
public String getPhone() {
return phone;
}
Для предустановленного ограничения доступна реализация по умолчанию. Определяемое пользователем ограничение требует реализации. В предыдущем примере пользовательскому ограничению @USPhoneNumber
требуется класс реализации.
В Bean Validation 2.0 можно указать одно и то же ограничение несколько раз для цели валидации, используя повторяющуюся аннотацию:
public class Account {
@Max (value = 2000, groups = Default.class, message = "max.value")
@Max (value = 5000, groups = GoldCustomer.class, message = "max.value")
private long withdrawalAmount;
}
Все предустановленные ограничения из пакета javax.validation.constraints
поддерживают повторяющиеся аннотации. Аналогичным образом, пользовательские ограничения могут использовать аннотацию @Repeatable
. В следующем примере, в зависимости от группы PeakHour
или NonPeakHour
, проверяется, является ли объект автомобиля трёх- или четырёхместным автомобилем и затем указывается подходящая полоса для движения:
/**
* Validate whether a car is eligible for car pool lane
*/
@Documented
@Constraint(validatedBy = CarPoolValidator.class)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
public @interface CarPool {
String message() default "{CarPool.message}";
Class>[] groups() default {};
int value();
Class<? extends Payload>[] payload() default {};
/**
* Defines several @CarPool annotations on the same element
* @see (@link CarPool}
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
CarPool[] value();
}
}
public class Car{
private String registrationNumber;
@CarPool(value = 2, group = NonPeakHour.class)
@CarPool(value = 3, group = {Default.class, PeakHour.class})
private int totalPassengers;
}
Любые ошибки валидации корректно обрабатываются и могут отображаться тегом h:messages
.
Любой Managed-бин, содержащий аннотации Bean Validation, автоматически приобретает ограничения, объявленные для полей на веб-страницах JavaServer Faces.
Для получения дополнительной информации об использовании ограничений проверки см. следующее:
Назад | Вперёд | Содержание |