Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JSF + Spring


Автор: Bandit 1.10.2009, 17:19
Доброго времени суток форумчанам.
Использую связку JSF + Spring.

Наткнулся на проблему(может это вовсе не проблема).

Проблема:
Есть 2е страницы(на самом деле их намного больше). Page1, Page2
Для каждой из них свой бин обработчик. Bean1, Bean2 находятся в scoup=session
Когда на странице Page1 обрабатывается форма и должен происходить переход на Page2(где отображается результат запроса).

Вопросы:
1. Можно ли указать для бинов инициализирующие методы? (Знаю что в Spring можно указать init method, но прописаны они у меня в faces-config.xml)
2. Можно ли из метода первого бина проинициализировать второй бин указаный в faces-config.xml и имеющий связь:

Код

<managed-property>
            <property-name>commonService</property-name>
            <property-class>ru.common.services.CommonService</property-class>
            <value>#{commonService}</value>
        </managed-property>

с бином commonService описаном в applicationContext.xml спринга? Т.е. заставить Spring или JSF простроить бин по указаным правилам.

Автор: powerOn 1.10.2009, 20:24
Цитата(Bandit @  1.10.2009,  18:19 Найти цитируемый пост)
1. Можно ли указать для бинов инициализирующие методы? (Знаю что в Spring можно указать init method, но прописаны они у меня в faces-config.xml)


ИМХО, тогда уж лучше все managed-бины сделать спринговыми, и настроить init-методы через него.

Цитата(Bandit @  1.10.2009,  18:19 Найти цитируемый пост)
2. Можно ли из метода первого бина проинициализировать второй бин указаный в faces-config.xml и имеющий связь:


Ничего не понял. Бину1 дать ссылку на бин1 имеется ввиду?

Автор: MisterCleric 2.10.2009, 10:02
Привет. 
Вообще смотри: для связки JSF+Spring достаточно выполнить такие действия:
1. Все бины описываешь в spring-контексте и там же их зависимости, т.е. dependency injection
2. В faces-config.xml досточно прописать так:
Код

<variable-resolver>
            org.springframework.web.jsf.DelegatingVariableResolver
        </variable-resolver>

и все spring-бины автоматически станут jsf-бинами.
Это пример из моего уже давно сданного в эксплуатацию проекта

Автор: Bandit 2.10.2009, 12:07
Цитата(powerOn @ 1.10.2009,  20:24)
Цитата(Bandit @  1.10.2009,  18:19 Найти цитируемый пост)
1. Можно ли указать для бинов инициализирующие методы? (Знаю что в Spring можно указать init method, но прописаны они у меня в faces-config.xml)


ИМХО, тогда уж лучше все managed-бины сделать спринговыми, и настроить init-методы через него.

Цитата(Bandit @  1.10.2009,  18:19 Найти цитируемый пост)
2. Можно ли из метода первого бина проинициализировать второй бин указаный в faces-config.xml и имеющий связь:



>> Ничего не понял. Бину1 дать ссылку на бин1 имеется ввиду?

Плохо выразился smile... Можно ли в бине1 проинициализировать бин2 со связями указаными в faces-config.xml и(или) applicationContext.xml.
Просто если бин2 еще не создан, а я его пытаюсь создать способом аля:

Код

        Bean2 bean2 = (Bean2) ex.getSessionMap().get("bean2");
        if(bean2 == null){
            bean2 = new Bean2();
            ex.getSessionMap().put("bean2",bean2);
        }
        bean2.selectValuesFromDataBase();

то bean2.selectValuesFromDataBase(); в котором юзается бин3 выборки из базы оказывается не проинициализированным Spring-ом. 

т.е. приблизительно такая зависимость устанавливаемых свойств
Код

      <managed-bean>
        <description>Bean2</description>
        <managed-bean-name>bean2</managed-bean-name>
        <managed-bean-class>ru.Bean2</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>bean3</property-name>
            <property-class>ru.Bean3</property-class>
            <value>#{bean3}</value>
        </managed-property>

Автор: powerOn 2.10.2009, 12:25
Инициализация бина - это ответственность самого бина и контейнера (JSF, Spring). Руками её делать не есть гуд.

Цитата(Bandit @  2.10.2009,  13:07 Найти цитируемый пост)
Просто если бин2 еще не создан, а я его пытаюсь создать способом аля:


Это нарушение принципов IoC.




Автор: Bandit 2.10.2009, 13:45
Цитата(powerOn @  2.10.2009,  12:25 Найти цитируемый пост)
Это нарушение принципов IoC.



Запомним и уесним smile))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)