Необходимы ли JSF Managed bean и управляемое свойство?

Я новичок в JSF и мне было интересно:

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

@ManagedProperty(value="#{myBean}") 

аннотация на контроллере и

@ManagedBean(name="myBean")
@SessionScoped

аннотации на форме bean?


person Mark W    schedule 06.12.2013    source источник


Ответы (2)


Управляемые компоненты в JSF используются для хранения состояния веб-страницы. Реализация JSF отвечает за создание и удаление объектов bean-компонентов (отсюда и название управляемого bean-компонента).

Для каждого класса, который вы пишете @ManagedBean, объект bean-компонента создается реализацией JSF по мере того, как он обнаруживает использование bean-компонента с именем (вы можете либо указать имя bean-компонента, либо оставить его для JSF, чтобы использовать класс имени по умолчанию имя, первый символ которого заменен на нижний регистр). Созданный объект размещается на карте заданной области. Каждая область имеет карту, которую она использует для хранения объектов bean-компонентов, для которых указана эта область.

Теперь, если вам нужны значения этих bean-компонентов в вашем контроллере, вы должны внедрить их с помощью аннотации ManagedProperty. Обратите внимание, что вам нужно будет предоставить контроллеру метод установки для manageProperty.

Итак, чтобы ответить на ваш вопрос, аннотация manageBean требуется, чтобы указать реализации JSF управлять экземпляром компонента и сохранять значения в таблице, характерной для области сеанса. А аннотация ManagedProperty необходима для использования этого bean-компонента, хранящегося в текущем сеансе, чтобы вы могли получить доступ ко всем его значениям.

person Adarsh    schedule 06.12.2013

Мы используем аннотацию @ManagedBean для регистрации java bean-компонента в среде JSF. Это замена элемента Faces-config.xml <managed-bean>. Обычно мы не используем атрибут name, потому что по умолчанию он уже представляет собой простое имя класса в верблюжьем регистре.

Мы используем @RequestScope и другие аннотации области, чтобы явно указать область, которую мы хотим, с помощью аннотации. Это эквивалентно указанию записи<managed-bean-scope> xml. Если вы не укажете область действия, по умолчанию она будет равна @NoneScoped.

Мы используем @ManagedProperty и указываем EL-выражение в его атрибуте value, чтобы использовать предоставленный JSF механизм внедрения зависимостей для артефактов JSF, как и другие управляемые компоненты с более широкими областями и переменными, определенными EL, такими как param. Мы делаем это в случае, если нам нужны внедренные значения в другие артефакты JSF, чаще всего в bean-компоненты. Введенные значения доступны в @PostConstruct-аннотированном методе компонента. Это альтернатива записи <managed-property> xml.

Подвести итог. Используйте @ManagedBean @RequestScoped для регистрации bean-компонента в среде JSF. Используйте @ManagedProperty внутри этого bean-компонента, чтобы иметь возможность ссылаться среди прочего на другие bean-компоненты JSF с такими же или более широкими областями действия в этом bean-компоненте. Если вам не нужно ссылаться на другие bean-компоненты в созданном bean-компоненте, вам не нужно использовать аннотацию @ManagedProperty, поскольку она не является обязательной.

person skuntsel    schedule 06.12.2013
comment
спасибо за информацию, однако это не отвечает на мой вопрос, и теперь я немного больше запутался в @ManagedProperty - person Mark W; 06.12.2013