JSF 1.2 исключение при восстановлении представления с истекшим сеансом
Мы недавно перешли на WebSphere 7.0 с 6.1, а также обновили с JSF1.1 до JSF1.2. Каждый раз, когда сеанс истекает и что-либо отправляется через браузер, я теперь получаю исключение:
Caused by: javax.faces.application.ViewExpiredException: viewId:/Foo/Bar.jsp - View /Foo/Bar.jsp could not be restored.
Как я могу предотвратить эту ошибку?
- Результаты запроса отображаются на той же странице, что и поля ввода.
- Я использую сессионный бэк для страницы.
Изменить: Это похоже на проблему миграции WAS 7.0/JSF 1.2, см. https://www.ibm.com/developerworks/forums/thread.jspa?threadID=332460&tstart=30 (ответ не предоставлен)
Здесь BalusC объясняет, почему это происходит. Javax.faces.application.ViewExpiredException: представление не может быть восстановлено. Но почему этого не произошло раньше? Несколько приложений работали нормально до перехода.
2 ответа
Вы проверяли это? Обработка "сеанса истекла" в веб-приложении JSF, работающем в JBoss AS 5
По крайней мере, так я обрабатываю истечение сеанса в моем приложении JSF.
Надеюсь, это поможет Стивену
Это не ново для JSF 1.2 и также мало связано с Websphere.
Я предполагаю, что вы ранее хранили состояние на клиенте и, таким образом, никогда не сталкивались с этим исключением раньше. По умолчанию в JSF сохраняется состояние на сервере. Вы можете явно запросить состояние на клиенте, поместив в файл web.xml следующее:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Посмотрите этот вопрос для более подробного ответа: почему JSF сохраняет состояние компонентов пользовательского интерфейса на сервере?