@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...
Но она как-то не всегда корректно отрабатывает (по крайней мере у меня).
  • Вопрос задан
  • 3261 просмотр
Пригласить эксперта
Ответы на вопрос 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>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы