@ Name ведет себя не так, как @ManagedBean - PullRequest
2 голосов
/ 05 июля 2011

В настоящее время я выполняю миграцию проекта с JBoss 4.2.2 на JBoss 6.0.0, а также добавляю Dependency Injection с помощью CDI и выполняю миграцию с JSF 1.2 на JSF 2.0. Я добавил файл beans.xml как в ejb-пакет, так и в war-пакет.

Теперь у меня есть страница xhtml, в которой используется управляемый компонент LoginBean.java. Бины были настроены в файле face-config.xml следующим образом:

<managed-bean>
    <description>Sample description</description>
    <managed-bean-name>loginBean</managed-bean-name>
    <managed-bean-class>com.sample.managedbeans.LoginBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Итак, сначала я удалил указанную выше конфигурацию и добавил @ManagedBean @SessionScoped к самому классу. Поскольку я хотел добавить CDI в проект, я изменил @ManagedBean на @Named (в отношении вопрос 2930889 ).

Теперь, когда я отправляю форму соответствующего xhtml, поля имя пользователя и пароль (используемые в JSP как #{loginBean.username}) равны нулю. Когда я переключаюсь обратно на @ManagedBean, все работает нормально.

Я что-то здесь упускаю?

С уважением, Себастьян

1 Ответ

5 голосов
/ 05 июля 2011

На самом деле в ee6 есть две @SessionScoped аннотации, которые * взяты из спецификации jsf 2 и работают только вместе с @ManagedBean, а затем @javax.enterprise.context.SessionScoped из cdi. Я предполагаю, что вы используете аннотацию jsf, которая игнорируется cdi, и поэтому cdi создает новый экземпляр вашего компонента.

...