Статьи

Учебное пособие по проверке JSF: обработка ошибок в JSF

В продолжение моей предыдущей статьи о создании JSF-приложения JavaServer Faces в Eclipse я публикую следующую статью из этой серии. На этот раз мы расскажем подробнее о модели проверки JSF и обработке ошибок в JSF.

Технология JavaServer Faces поддерживает механизм проверки данных редактируемых компонентов. Каждый компонент в JavaServer Faces создает сообщения об ошибках в течение жизненного цикла JSF и присоединяет их к объекту FacesContext. Следовательно, каждое сообщение присоединяется к компоненту в дереве компонентов, и сообщение отображается в представлении в конце жизненного цикла JSF.

Отображение сообщений об ошибках при просмотре

JSF предоставляет различные теги для обработки и отображения сообщений в представлении. В эталонной реализации Sun библиотеки JSF HTML есть два тега сообщения:

<h:message />
<h:messages />

h: messages используется для отображения всех сообщений одновременно. Вы можете разместить тег h: messages в начале вашей формы. Вам может потребоваться отображать только глобальные сообщения, используя тег h: messages. Для отображения только глобальных сообщений установите для атрибута globleOnly значения h: messages значение true.

<h:messages globalOnly="true" />

Используйте h: message для отображения сообщения, прикрепленного к одному компоненту. Атрибут at = «» может использоваться для указания идентификатора компонента, чьи сообщения об ошибках нам нужно отобразить. H: сообщение используется для отображения сообщения об ошибке рядом с компонентом, который сгенерировал ошибку. Если к сообщению прикреплено более одного сообщения этот компонент, h: message будет отображать последнее сообщение.

Каждое сообщение может иметь краткое описание и подробное описание. При использовании тега h: message по умолчанию показывается подробное сообщение. При использовании тега h: messages по умолчанию отображаются сводные описания. Чтобы изменить значения по умолчанию, измените логические атрибуты showSummary и showDetail .

<h:message for="userName" showSummary="true"/>
<h:messages showDetail="true"/>

Вы также можете включить отображение подробного сообщения компонента в виде всплывающей подсказки. Для этого установите для атрибута подсказки тега сообщения значение true. Обратите внимание, что для включения этой опции для showDetail и showSummary должно быть установлено значение true.

Существует четыре формы проверки JSF:
1. Встроенные компоненты проверки
2. Проверка уровня приложения
3. Пользовательские компоненты проверки с использованием интерфейса Validator
4. Методы проверки в компонентах поддержки

Встроенные компоненты проверки

Эталонная реализация Sun JSF предоставляет некоторые компоненты проверки по умолчанию, которые можно использовать для проверки любого пользовательского ввода. Базовая библиотека JSF предоставляет теги для проверки ввода. Ниже приведены несколько тегов, которые можно использовать для проверки ввода.

f: validateDoubleRange : этот тег проверяет значение компонента в указанном диапазоне. Значение должно быть преобразовано в тип с плавающей точкой или саму плавающую точку.

f: validateLength : этот тег проверяет длину значения и ограничивает его в пределах указанного диапазона. Значение должно иметь тип java.lang.String.

f: validateLongRange : Проверяет, находится ли значение компонента в указанном диапазоне. Значение должно иметь числовой тип или строку, конвертируемую в long.
Пример:

<h:inputText id="Username" value="#{UserBean.userName}">
<f:validateLength minimum="6" maximum="15"/>
</h:inputText>
....
<h:inputText id="Age" value="#{UserBean.age}">
<f:validateLongRange minimum="1" maximum="120"/>
</h:inputText>

Проверка с использованием методов Backing Bean

Метод базового компонента может использоваться для проверки любого поля ввода. Сначала нам нужно создать метод вспомогательного компонента, который будет вызываться в процессе проверки. Подпись метода может быть:

public void <METHOD_NAME> (FacesContext context, UIComponent component, Object value) { .. }

Как только метод вспомогательного компонента будет готов, мы можем связать его с компонентом, используя тег f: validator .

<h:inputText value="#{userBean.name}" validator="#{userBean.checkUsername}">
</h:inputText>

В приведенном выше фрагменте мы связали метод userBean checkUsername () с компонентом inputText. Можно связать более одного валидатора с одним компонентом.

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

Пользовательские компоненты проверки с использованием интерфейса Validator

Интерфейс Validator может быть расширен, и может быть создан специальный валидатор, который можно повторно использовать в различных приложениях в JSF. Чтобы создать собственный валидатор, нам нужно создать класс Java, который реализует интерфейс javax.faces.validator.Validator . Интерфейс Validator предоставляет метод validate (), который необходимо реализовать. Ниже приведена подпись метода validate ().

После того, как Валидатор реализован, нам нужно зарегистрировать этот валидатор в файлеface-config.xml. Для этого скопируйте следующий код вface-config.xml, предполагая, что наше имя класса валидатора — net.viralpatel.jsf.helloworld.EmailValidator.

<validator>
<validator-id>emailValidator</validator-id>
<validator-class>net.viralpatel.jsf.helloworld.EmailValidator</validator-class>
</validator>

Мы можем связать этот валидатор с любым компонентом, используя тег f: validator.

<h:inputText id="Email" value="#{userBean.email}" required="true">
<f:validator validatorId="emailValidator" />
</h:inputText>

Обратите внимание, что в приведенном выше фрагменте кода атрибут validatorId тега f: validator указывает на идентификатор валидатора, который зарегистрирован в файлеface-config.xml.
Для проверки адреса электронной почты мы можем создать класс Validator как:

Таким образом, используя платформу JSF Validation, можно легко проверить вводимые пользователем данные. Мы видели разные способы проверки в JSF: валидаторы по умолчанию, методы поддержки bean-компонентов и валидация через интерфейс валидатора.

Дайте мне знать ваши комментарии об этом уроке.

С http://viralpatel.net/blogs/