OpenSessionInViewFilter + перенаправление в JSF - PullRequest
0 голосов
/ 25 июля 2011

У меня есть приложение JSF 2.1, использующее Spring и Hibernate.

Для решения проблемы LazyLoading я использую фильтр OpenSessionInView.

<filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
 <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Все работает нормально, мои ленивые классы запускаются, но когда я использую правило навигации с перенаправлением

 <navigation-rule>
   <from-view-id>/index.xhtml</from-view-id>
   <navigation-case>
       <from-outcome>fail</from-outcome>
       <to-view-id>/index.xhtml</to-view-id>
       <redirect />
   </navigation-case>
</navigation-rule>

Я получаю org.hibernate.LazyInitializationException: id Я удаляю <redirect />тег все работает отлично.

Почему?Это потому, что был создан новый вид?Так почему у меня новый Hibernate Session?Есть ли работа вокруг?

1 Ответ

2 голосов
/ 25 июля 2011

<redirect /> реализуется путем возврата 301 (или 303) кода ответа в браузер, таким образом завершает текущий запрос и закрывает текущий сеанс (Hibernate).

Затем браузер отправляет запрос new на указанный URL, что приводит к новому сеансу (Hibernate), с которым ваши еще не инициализированные сущности не связаны.

Вам нужно будет либо вручную инициировать инициализацию в существующем запросе до перенаправления (если это возможно), либо повторно получить все необходимые объекты снова после перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...