ViewExpiredException в JSF

Я использую JSF и имею javax.faces.STATE_SAVING_METHOD для клиента в web.xml. Я хочу, чтобы когда время сеанса истекло, и я пытаюсь перенаправить на другую страницу, он должен перенаправить на sessionTimeout.jsf и при нажатии кнопки на этой странице он должен перенаправить на login.jsf. Я разработал sessionTimeout.jsf. Каждый раз, когда сеанс истекает, и я пытаюсь перейти на другую страницу, выдается исключение javax.faces.application.ViewExpiredException. Я установил переменную сеанса на целевой странице, так что каждый раз, когда он переходит на эту страницу, он сначала проверяет переменную, но здесь свое исключение, прежде чем перейти на эту страницу. Как это решить?


person Prabhat    schedule 21.07.2010    source источник
comment
Решено добавлением пользовательского ViewHandler. Спасибо всем   -  person Prabhat    schedule 22.07.2010


Ответы (4)


Это может помочь

person Jose Diaz    schedule 21.07.2010
comment
Я не могу поместить тег ‹error-page› в faces-config.xml, и размещение его в web.xml не имеет никакого значения - person Prabhat; 21.07.2010
comment
Какую реализацию JSF вы используете: MyFaces, Facelets, Richfaces и т. Д.? - person Jose Diaz; 21.07.2010
comment
@Prabhat: stackoverflow.com/questions/3206922/ - person BalusC; 21.07.2010

«Каждый раз, когда сеанс истекает, и я пытаюсь перейти на другую страницу, выдается исключение javax.faces.application.ViewExpiredException».

Вы должны сделать такие страницы, как страницы ошибок и страницу входа в систему временными, чтобы сеанс мог быть недействительным при переходе со страниц внутри сеанса. Спасибо BalusC за статью об этом:

http://balusc.omnifaces.org/2013/02/stateless-jsf.html

Это гарантирует, что ваши bean-компоненты с областью действия сеанса не будут повторно инициализированы немедленно при аннулировании сеанса в методе действия и перенаправлении на представление, которое не защищено фильтром авторизации сеанса.

person Michael Pasacrita    schedule 11.01.2016

Решение состоит в том, чтобы добавить:

<a4j:region>
 <script language="javascript">
 A4J.AJAX.onExpired = function(loc, expiredMsg){
  window.location = "/sessionTimeOut.jsf";
 }
 </script>
</a4j:region>

Подробнее в руководстве RichFaces

person Dejell    schedule 21.07.2010

добавить в Web.xml дать сообщение на странице для перезагрузки ...

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>viewExpired.xhtml</location>
</error-page>
person TaherT    schedule 22.07.2010
comment
Прочтите другие ответы и комментарии к другим ответам, прежде чем публиковать дублирующийся ответ без надобности. - person BalusC; 22.07.2010