Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Использование стандартных валидаторов

JavaServer Faces предоставляет набор стандартных классов и связанных с ними тегов, которые авторы страниц и разработчики приложений могут использовать для валидации данных компонента. Таблица 11-6 перечисляет все стандартные классы валидаторов и теги, которые позволяют вам использовать валидаторы со страницы.

Таблица 11-6. Классы валидаторов

Класс валидатора

Тег

Функция

BeanValidator

validateBean

Регистрирует валидатор бина в компоненте.

BeanValidator

validateWholeBean

Позволяет валидацию нескольких полей путём включения валидацию бина на уровне класса вспомогательного бина CDI.

DoubleRangeValidator

validateDoubleRange

Проверяет, находится ли локальное значение компонента в определённом диапазоне. Значение должно быть числом с плавающей точкой или конвертируемым в число с плавающей точкой.

LengthValidator

validateLength

Проверяет, находится ли длина локального значения компонента в определённом диапазоне. Значение должно быть java.lang.String.

LongRangeValidator

validateLongRange

Проверяет, находится ли локальное значение компонента в определённом диапазоне. Значение должно быть любого числового типа или объектом типа String, конвертируемым в long.

RegexValidator

validateRegex

Проверяет, соответствует ли локальное значение компонента регулярному выражению из пакета java.util.regex.

RequiredValidator

validateRequired

Гарантирует, что локальное значение не является пустым в компоненте EditableValueHolder.

Все эти классы валидатора реализуют интерфейс Validator. Авторы компонентов и разработчики приложений также могут реализовать этот интерфейс, чтобы задать собственный набор ограничений для значения компонента.

Подобно стандартным конвертерам, каждый из этих валидаторов имеет одно или несколько стандартных сообщений об ошибках, связанных с ним. Если вы зарегистрировали один из этих валидаторов в компоненте на своей странице, и валидатор не может проверить значение компонента, на странице появится сообщение об ошибке валидатора. Например, сообщение об ошибке, которое отображается, когда значение компонента превышает максимально допустимое значение LongRangeValidator, выглядит следующим образом:

{1}: Ошибка проверки: значение больше допустимого максимума "{0}"

В этом случае параметр замещения {1} заменяется меткой компонента или id, а параметр замещения {0} заменяется на максимальное значение, разрешённое валидатором.

См. Отображение сообщений об ошибках тегами h:message и h:messages для получения информации о том, как отображать сообщения об ошибках на странице при сбоях валидации.

Вместо использования стандартных валидаторов вы можете использовать Bean Validation для проверки данных. Если вы указываете ограничения Bean Validation на свойствах вашего Managed-бина, эти ограничения автоматически помещаются в соответствующие поля на веб-страницах ваших приложений. См. главу 23 «Введение в валидацию бинов» для получения дополнительной информации. Не обязательно указывать тег validateBean для использования Bean Validation, но этот тег позволяет использовать более сложные функции Bean Validation. Например, вы можете использовать атрибут validationGroups тега, чтобы указать группы ограничений.

Вы также можете создавать и регистрировать кастомные валидаторы, хотя Bean Validation делает эту функцию менее полезной. Для получения дополнительной информации см. Создание и использование кастомного валидатора.

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

Чтобы проверить значение компонента с помощью определённого валидатора, необходимо зарегистрировать этот валидатор в компоненте. Вы можете сделать это одним из следующих способов.

  • Вложите соответствующий тег валидатора (показан в таблице 11-6) внутрь тега компонента. Использование тегов валидатора объясняет, как использовать тег validateLongRange. Вы можете использовать другие стандартные теги таким же образом.

  • Обратитесь к методу, который выполняет проверку из атрибута validator тега компонента.

  • Вложите тег валидатора в тег компонента и используйте для ссылки на валидатор либо атрибут validatorId тега валидатора, либо атрибут binding компонента.

Смотрите Ссылка на метод, который выполняет валидацию для получения дополнительной информации об использовании атрибута validator.

Атрибут validatorId работает аналогично атрибуту converterId тега converter, как описано в Конвертация значения компонента.

Помните, что проверка может быть выполнена только для компонентов, которые реализуют EditableValueHolder, потому что только эти компоненты принимают валидируемые значения.

Использование тегов валидатора

В следующем примере показано, как использовать тег валидатора f:validateLongRange для компонента ввода с именем quantity:

<h:inputText id="quantity" size="4" value="#{item.quantity}">
    <f:validateLongRange minimum="1"/>
</h:inputText>
<h:message for="quantity"/>

Этот тег требует, чтобы пользователь ввёл число не меньше 1 (единицы). Тег validateLongRange также имеет атрибут maximum, который устанавливает максимальное значение для ввода.

Атрибуты всех стандартных тегов валидатора принимают выражения значений EL. Это означает, что атрибуты могут ссылаться на свойства Managed-бина, а не указывать литеральные значения. Например, тег f:validateLongRange в предыдущем примере может ссылаться на свойства minimum и maximum Managed-бина, чтобы получить минимальное и максимальное допустимые значения валидатора, как показано в этом фрагменте из примера guessnumber-jsf:

<h:inputText id="userNo"
             title="Type a number from 0 to 10:"
             value="#{userNumberBean.userNumber}">
    <f:validateLongRange minimum="#{userNumberBean.minimum}"
                         maximum="#{userNumberBean.maximum}"/>
</h:inputText>

Следующий тег f:validateRegex показывает, как можно убедиться, что пароль имеет длину от 4 до 10 символов и содержит как минимум одну цифру, как минимум одну строчную букву и как минимум одну заглавную букву:

<f:validateRegex pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,10})"
                 for="passwordVal"/>

Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)