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

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

Регистрация сообщений приложения

Сообщения приложений могут содержать любые строки, отображаемые пользователю, а также настраиваемые сообщения об ошибках (которые отображаются тегами message и messages) для ваших кастомных конвертеров или валидаторов. Чтобы сделать сообщения доступными во время запуска приложения, выполните одно из следующих действий:

  • Программно поставьте отдельное сообщение в очередь объекта javax.faces.context.FacesContext, как описано в Использование FacesMessage для создания сообщения

  • Зарегистрируйте все сообщения в вашем приложении, используя файл конфигурации приложения.

Вот раздел файла faces-config.xml, в котором регистрируются сообщения для программы Duke's Bookstore:

<application>
    <resource-bundle>
        <base-name>
            javaeetutorial.dukesbookstore.web.messages.Messages
        </base-name>
        <var>bundle</var>
    </resource-bundle>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>es</supported-locale>
        <supported-locale>de</supported-locale>
        <supported-locale>fr</supported-locale>
    </locale-config>
</application>

Этот набор элементов вызывает заполнение приложения сообщениями, содержащимися в указанном bundle-ресурсе.

Элемент resource-bundle представляет набор локализованных сообщений. Он должен содержать полный путь к bundle-ресурсу, содержащему локализованные сообщения (в этом случае dukesbookstore.web.messages.Messages). Элемент var определяет имя EL, под которым авторы страниц ссылаются на bundle-ресурс.

Элемент locale-config перечисляет локаль по умолчанию и другие поддерживаемые локали. Элемент locale-config позволяет системе найти правильную локаль на основе языковых настроек браузера.

Теги supported-locale и default-locale принимают двухсимвольные коды в нижнем регистре, определённые ISO 639-1 (см. http://www.loc.gov/standards/iso639-2/php/English_list.php). Убедитесь, что bundle-ресурс действительно содержит сообщения для локалей, указанных с помощью этих тегов.

Чтобы получить доступ к локализованному сообщению, разработчик приложения просто ссылается на ключ сообщения из bundle-ресурса.

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

<h:graphicImage id="mapImage"
                name="book_all.jpg"
                library="images"
                alt="#{bundle.ChooseBook}"
                usemap="#bookMap" />

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

Использование FacesMessage для создания сообщения

Вместо регистрации сообщений в файле конфигурации приложения вы можете получить доступ к java.util.ResourceBundle напрямую из кода Managed-бина. Фрагмент кода ниже находит сообщение об ошибке электронной почты:

String message = "";
...
message = ExampleBean.loadErrorMessage(context,
    ExampleBean.EX_RESOURCE_BUNDLE_NAME,
         "EMailError");
context.addMessage(toValidate.getClientId(context),
    new FacesMessage(message));

Эти строки вызывают метод loadErrorMessage бина для получения сообщения из ResoureBundle. Вот метод loadErrorMessage:

public static String loadErrorMessage(FacesContext context,
     String basename, String key) {
    if ( bundle == null ) {
         try {
            bundle = ResourceBundle.getBundle(basename,
                 context.getViewRoot().getLocale());
        } catch (Exception e) {
            return null;
        }
    }
    return bundle.getString(key);
}

Ссылки на сообщения об ошибках

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

Сообщения об ошибках, к которым имеют доступ эти теги, включают

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

  • Кастомные сообщения об ошибках, содержащиеся в bundle-ресурсах, зарегистрированных в приложении архитектором приложения с помощью элемента resource-bundle в файле конфигурации

Когда конвертер или валидатор зарегистрирован в компоненте ввода, соответствующее сообщение об ошибке автоматически ставится в очередь на компоненте.

Автор страницы может переопределить сообщения об ошибках, поставленные в очередь в компоненте, используя следующие атрибуты тега компонента:

  • converterMessage: ссылается на сообщение об ошибке, которое отображается, когда данные на содержащем его компоненте не могут быть преобразованы конвертером, зарегистрированным в этом компоненте.

  • requiredMessage: ссылается на сообщение об ошибке, которое будет отображаться, если в содержащий его компонент не было введено никакого значения.

  • validatorMessage: ссылается на сообщение об ошибке, которое отображается, когда данные содержащего его компонента выдают ошибку при проверке валидатором, зарегистрированным в этом компоненте.

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

  • Разработчиком приложения, использующим элемент resource-bundle в файле конфигурации

  • Автором страницы с помощью тега f:loadBundle

И наоборот, элемент resource-bundle должен использоваться для предоставления приложению тех bundle-ресурсов, содержащих кастомные сообщения об ошибках, которые ставятся в очередь в компоненте в результате регистрации в компоненте кастомного конвертера или валидатора.

Следующие теги показывают, как указать атрибут requiredMessage, используя выражение значения для ссылки на сообщение об ошибке:

<h:inputText id="ccno" size="19"
    required="true"
    requiredMessage="#{customMessages.ReqMessage}">
    ...
</h:inputText>
<h:message styleClass="error-message" for="ccno"/>

Выражение значения, используемое requiredMessage в этом примере, ссылается на сообщение об ошибке с ключом ReqMessage в bundle-ресурсе customMessages.

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


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