Как обрабатывать завершение сеанса и ViewExpiredException в JSF 2?

Рассмотрим следующий сценарий. Я нажимаю кнопку отправки формы JSF после окончания сеанса (истек). В браузере отображается сообщение об ошибке:

ViewExpiredException: контекст представления не может быть восстановлен

Я хочу сделать, чтобы автоматически перенаправить на домашнюю страницу веб-сайта после истечения срока действия сессии. Каков механизм для этого? Любая помощь будет высоко оценена.

Ответ 1

Чтобы обрабатывать исключение всякий раз, когда пользователь вызывает синхронный запрос POST на странице при истечении срока действия HTTP-сеанса, а метод сохранения состояния просмотра JSF установлен на server, добавьте <error-page> в web.xml, который ловит JSF ViewExpiredException и показывает домашнюю страницу.

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/home.xhtml</location>
</error-page>

Чтобы обрабатывать исключение в асинхронных (ajax) запросах, вам необходимо реализовать пользовательский ExceptionHandler, как указано в Тайм-аут сеанса и обработку ViewExpiredException в JSF/PrimeFaces ajax request

См. также: