Я использую JSF и имею javax.faces.STATE_SAVING_METHOD для клиента в web.xml. Я хочу, чтобы когда время сеанса истекло, и я пытаюсь перенаправить на другую страницу, он должен перенаправить на sessionTimeout.jsf и при нажатии кнопки на этой странице он должен перенаправить на login.jsf. Я разработал sessionTimeout.jsf. Каждый раз, когда сеанс истекает, и я пытаюсь перейти на другую страницу, выдается исключение javax.faces.application.ViewExpiredException. Я установил переменную сеанса на целевой странице, так что каждый раз, когда он переходит на эту страницу, он сначала проверяет переменную, но здесь свое исключение, прежде чем перейти на эту страницу. Как это решить?
ViewExpiredException в JSF
Ответы (4)
«Каждый раз, когда сеанс истекает, и я пытаюсь перейти на другую страницу, выдается исключение javax.faces.application.ViewExpiredException».
Вы должны сделать такие страницы, как страницы ошибок и страницу входа в систему временными, чтобы сеанс мог быть недействительным при переходе со страниц внутри сеанса. Спасибо BalusC за статью об этом:
http://balusc.omnifaces.org/2013/02/stateless-jsf.html
Это гарантирует, что ваши bean-компоненты с областью действия сеанса не будут повторно инициализированы немедленно при аннулировании сеанса в методе действия и перенаправлении на представление, которое не защищено фильтром авторизации сеанса.
Решение состоит в том, чтобы добавить:
<a4j:region>
<script language="javascript">
A4J.AJAX.onExpired = function(loc, expiredMsg){
window.location = "/sessionTimeOut.jsf";
}
</script>
</a4j:region>
Подробнее в руководстве RichFaces
добавить в Web.xml дать сообщение на странице для перезагрузки ...
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>viewExpired.xhtml</location>
</error-page>