@miroshnik
android/java dev

Чем заменить ViewScoped при интеграции JSF и Spring?

Здравствуйте! Я буквально недавно начал делать учебный проект, где используется JSF + Spring. Возникла проблема.

В JSF есть отличная область действия для бина, которая называется ViewScoped. Бин сохраняется пока отображается страница. Очень подходит, если на страничке много ajax-запросов. И не надо с сессиями возиться и нет постоянного переинстанциирования бина после каждого HTTP-запроса (как при RequestScoped)

При интеграции со спрингом нужно использовать области видимости для бинов такие, какие есть в спринге (singleton, request, session, prototype и т.д.) и проблема в том, что аналога ViewScoped в Spring нет. А при использовании scope = request при каждом ajax запросе бин инициализируется заново, происходит считывание из базы и т.д.

Как лучше решить эту проблему?

Я видел кастомную реализацию viewscope как раз для моего случая https://github.com/michail-nikolaev/primefaces-spr...
Но она как-то не всегда корректно отрабатывает (по крайней мере у меня).
  • Вопрос задан
  • 3258 просмотров
Пригласить эксперта
Ответы на вопрос 1
@pashablya1
Оставь создание бина на jsf с его scoped.
Я делал так:
1. Интеграция jsf со спрингом в faces-config
<application>
		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
	</application>

2. Описание бина и spring DI из контекста
<managed-bean>
		<managed-bean-name>bean</managed-bean-name>
		<managed-bean-class>com.xyz.SuperBean</managed-bean-class>
		<managed-bean-scope>view</managed-bean-scope>
		<managed-property>
			<property-name>service</property-name>
			<value>#{newsService}</value>
		</managed-property>
	</managed-bean>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
18 мая 2024, в 21:07
5000 руб./за проект
18 мая 2024, в 20:58
5000 руб./за проект
18 мая 2024, в 20:53
500 руб./за проект