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

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

Использование аннотаций для настройки Managed-бинов

Примечание: в JSF 2.3 аннотации к управляемым компонентам устарели. CDI сейчас является предпочтительным подходом.

Поддержка JavaServer Faces для аннотаций бинов представлена ​​в главе 7 «JavaServer Faces». Аннотации бинов могут использоваться для настройки приложений JavaServer Faces.

Аннотация @Named (javax.inject.Named) в классе вместе с аннотацией области видимости автоматически регистрирует этот класс как ресурс JavaServer Faces. Компонент, использующий эти аннотации, является Managed-бином CDI.

Ниже показано использование аннотаций @Named и @SessionScoped в классе:

@Named("cart")
@SessionScoped
public class ShoppingCart ... { ... }

Приведённый выше фрагмент кода показывает бин, управляемый JavaServer Faces и доступный в течение жизни сессии.

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

Все классы будут проверяться на наличие аннотаций при запуске, если только элемент faces-config в файле faces-config.xml не имеет атрибута metadata-complete, установленного в true.

Аннотации также доступны для других артефактов, таких как компоненты, конвертеры, валидаторы и отрисовщики, которые будут использоваться вместо записей файла конфигурации приложения. Они обсуждаются вместе с регистрацией кастомных слушателей, кастомных валидаторов и кастомных конвертеров в главе 15 «Создание кастомных компонентов интерфейса пользователя и других кастомных объектов».

Использование областей видимости Managed-бинов

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

  • Приложение (javax.enterprise.context.ApplicationScoped). Область видимости приложения сохраняется во взаимодействиях всех пользователей с веб-приложением.

  • Сессия (javax.enterprise.context.SessionScoped). Область видимости сессии сохраняется для нескольких HTTP-запросов в веб-приложении.

  • Flow (javax.faces.flows.FlowScoped): область видимости Flow сохраняется во время взаимодействия пользователя с определённым Flow веб-приложения. См. Использование Faces Flows для получения дополнительной информации.

  • Запрос (javax.enterprise.context.RequestScoped): область видимости запроса сохраняется в течение одного HTTP-запроса в веб-приложении.

  • Dependent (javax.enterprise.context.Dependent): указывает, что бин зависит от какого-либо другого компонента.

Возможно, вы захотите использовать @Dependent, когда Managed-бин ссылается на другой Managed-бин. Второй компонент не должен находиться в области видимости (@Dependent), даже если предполагается, что он создаётся только тогда, когда на него ссылаются. Если вы определяете бин как @Dependent, бин создаётся заново каждый раз, когда на него ссылаются, поэтому он не сохраняется ни в какой области видимости.

Если на ваш Managed-бин ссылается атрибут binding тега компонента, вы должны определить бин с областью видимости запроса. Если вместо этого вы поместите бин в область видимости сессии или приложения, бин должен будет принять меры предосторожности для обеспечения потокобезопасности (thread safety), поскольку каждый из объектов javax.faces.component.UIComponent выполняется внутри потока.

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


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