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

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

Managed-бины в JavaServer Faces

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

Замечание:

Глава 10 «Использование JavaServer Faces на веб-страницах» и глава 11 «Использование конвертеров, слушателей и валидаторов» показывают, как добавлять компоненты на страницу и подключать их к серверным объектам с помощью тегов. В этих главах также показано, как предоставить дополнительную функциональность компонентам через конвертеры, слушатели и валидаторы. Разработка приложения JavaServer Faces также включает в себя задачу программирования серверных объектов: Managed-бинов, конвертеров, обработчиков событий и валидаторов.

Здесь рассматриваются следующие темы:

Создание Managed-бина

Managed-бин создаётся с помощью конструктора без аргументов, набора свойств и методов, необходимых для выполнения функций компонента. Каждое из свойств Managed-бина может быть связано с одним из следующих:

  • Значение компонента

  • Объект компонента

  • Объект конвертера

  • Объект слушателя

  • Объект валидатора

Наиболее распространённые функции, выполняющиеся методами Managed-бина, включают в себя следующие:

  • Валидация данных компонента

  • Обработка события, инициированного компонентом

  • Выполнение обработки для определения следующей страницы, на которую должен быть выполнен переход

Как и во всех компонентах JavaBeans, свойство состоит из приватного поля данных и набора методов доступа, как показано в следующем коде:

private Integer userNumber = null;
...
public void setUserNumber(Integer user_number) {
    userNumber = user_number;
}
public Integer getUserNumber() {
    return userNumber;
}

При привязке к значению компонента свойство бина может быть любым примитивным или числовым типом или любого типа Java, для которого приложение имеет соответствующий конвертер. Например, свойство может иметь тип java.util.Date, если приложение имеет конвертер, который может преобразовать тип Date в String и обратно. См. Запись свойств бина для получения информации о том, какие типы принимаются тегами компонентов.

Когда свойство бина связано с объектом компонента, тип свойства должен совпадать с типом компонента. Например, если со свойством связан компонент javax.faces.component.UISelectBoolean, свойство должно принять и вернуть объект UISelectBoolean. Аналогично, если свойство связано с объектом конвертера, валидатора или слушателя, свойство должно иметь соответствующий тип конвертера, валидатора или слушателя.

Для получения дополнительной информации о написании бинов и их свойств см. Запись свойств бина.

Использование EL для ссылки на Managed-бины

Чтобы связать значения и объекты компонента со свойствами Managed-бина или ссылаться на методы Managed-бина из тегов компонента, авторы страниц используют синтаксис языка выражений. Как объясняется в Обзоре EL, ниже перечислены некоторые функции, которые предлагает EL:

  • Отложенное выполнение выражений

  • Возможность использовать выражение значения для чтения и записи данных

  • Выражения методов

Отложенное выполнение выражений важно, поскольку жизненный цикл JavaServer Faces разделён на несколько фаз, на которых обработка событий компонента, конвертация и валидация данных, а также передача данных во внешние объекты выполняются упорядоченным образом. Реализация должна иметь возможность задержать выполнение выражений до тех пор, пока не будет достигнута надлежащая фаза жизненного цикла. Поэтому реализация атрибутов тега всегда используют синтаксис отложенного выполнения, которое имеет разделитель #{}.

Для хранения данных во внешних объектах почти все атрибуты тега JavaServer Faces используют выражения lvalue — выражениями, позволяющими как получать, так и устанавливать данные для внешних объектов.

Наконец, некоторые атрибуты принимают выражения метода, которые ссылаются на методы, обрабатывающие события компонента, валидирующие или конвертирующие данные компонента.

Чтобы проиллюстрировать тег JavaServer Faces с использованием EL, следующий тег ссылается на метод, валидирующий пользовательский ввод:

<h:inputText id="inputGuess"
    value="#{userNumberBean.userNumber}"
    required="true" size="3"
    disabled="#{userNumberBean.number eq userNumberBean.userNumber ...}"
    validator="#{userNumberBean.validateNumberRange}">
</h:inputText>

Этот тег связывает значение компонента inputGuess со свойством Managed-бина UserNumberBean.userNumber используя выражение lvalue. В теге используется выражение метода для ссылки на метод UserNumberBean.validateNumberRange, который валидирует локальное значение компонента. Локальное значение — это то, что пользователь вводит в поле, соответствующем этому тегу. Этот метод вызывается при вычислении выражения.

Почти все атрибуты тега JavaServer Faces принимают выражения значений. В дополнение к ссылкам на свойства бинов выражения значений могут ссылаться на списки (List), отображения (Map), массивы, неявные объекты и bundle-ресурсы.

Другое использование выражений значений — это связывание объекта компонента со свойством Managed-бина. Автор страницы делает это, ссылаясь на свойство из атрибута binding:

<h:outputLabel for="fanClub"
               rendered="false"
               binding="#{cashierBean.specialOfferText}">
               value="#{bundle.DukeFanClub}"/>
</h:outputLabel>

Помимо использования выражений со стандартными тегами компонентов, вы можете настроить кастомные свойства компонентов для принятия выражений, создав для них объекты javax.el.ValueExpression или javax.el.MethodExpression.

Для получения информации о EL см. главу 9 «Язык выражений».

Для получения информации о ссылках на методы Managed-бина из тегов компонента см. Ссылка на метод Managed-бина.


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