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 сохраняет состояние компонентов пользовательского интерфейса на сервере?

Другие вопросы по тегам