![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
zhz |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 31.10.2006 Где: Petropavlovsk-Kam chatsky Репутация: нет Всего: 2 |
Окончательно запутался в бинах. Объясните пожалуйста на конкретном примере.
Делаю no-interface Stateless Session Bean. (Он же backing bean, так? )
Делаю контроллер, он же ManagedBean. Данный ManagedBean при помощи аннотации @EJB через CDI инжектирует в себя предыдущий no-interface Stateless Session Bean.
И последнее, есть view в виде JSF:
Данное приложение работает как и ожидается за исключением отображения переменных (пометил в коде) после нажатия на кнопку. Т.е. в логах сервера я вижу, что значение переменных меняется, но на странице не отображается. Почему?? Самое непонятное, - если я комментирую @ManagedBean, и вместо нее оставляю @Named, что от этого меняется? Бин перестает быть Managed Bean? Теперь я должен производить инъекцию первого бина путем @Inject (вместо @EJB). В чем разница этих подходов? И главное, ПОЧЕМУ, во втором случае(использование @Named и @Inject), после нажатия кнопки изменяется только mainViewBean.privetBean.privet, а mainViewBean.sampleString остается без изменений?! Как так!? |
||||||
|
|||||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
Для начала есть EJB, CDI, JSF.
Все они предоставляют возможность инъектов. JSF в себе содержит почти все, что предостав CDI. JSF: @ManagedBean - анатация говорит, что бин - JSF бин. Он будет видет в EL по имени Далье у JSF есть скоупы: @RequestScope, @ViewScope, @SessionScope (внимательно смотрите, когда импортите их, потому что у CDI такие же). @ManagedProperty - анатация для инъектов. Возможность заинъектить другой объект. Будет работать только с JSF бинами, т.е. с теми где есть @ManagedBean. CDI: Впринципе любой класс, у которого есть default конструктор или для которого объявлен продюсер метот (@Produces) может быть как бы CDI бином. @Named - бин будет виден в EL (но это не JSF бин) Далье у CDI есть скоупы: @RequestScoped, @ConversationScoped, @SessionScoped, @ApplicationScoped (опять же внимательно при имортах) @Inject - возможность инъектить. Работает как минимум с CDI и EJB бинами. С JSF вроде не работает. EJB: @Stateless, @Statefull, @Singletone - анатации говорят, что это EJB бин. В них будут доступны всякие вкусности EJB, аля работа с транзакциями, многопоточность и тп. @EJB - возможность инъектить EJB бин. (можно использовать CDI @Inject вместо этого). Ну а дальше вам надо разбираться в скоупах и времени жизни разных скоупов. Я думаю это проще нагуглить. |
|||
|
||||
zhz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 31.10.2006 Где: Petropavlovsk-Kam chatsky Репутация: нет Всего: 2 |
Спасибо, все начало становится на места. Только вот почему в приведенном коде, при использовании @Named не присваивается значение через <h:outputText value="#{mainViewBean.sampleString}"/> ?
|
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 1 Всего: 17 |
Возможно надо добавить RequestScoped?
|
|||
|
||||
zhz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 31.10.2006 Где: Petropavlovsk-Kam chatsky Репутация: нет Всего: 2 |
Все верно, скоуп один и тот же, но у разных бинов разные импорты.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |