Я использую JSF RI 1.1. Как перенаправить на индексную страницу, если происходит тайм-аут сеанса?
Как перенаправить на страницу индекса, если время сеанса произошло в приложении jsf
Ответ 1
Существует два способа объединения:
-
Используйте заголовок
<meta>refresh в элементе HTML<head>в сочетании сHttpSession#getMaxInactiveInterval(), который возвращает остаток секунд, который сеанс еще не прожил.<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">Этот подход автоматически перенаправляет страницу на заданный
url, когда сеанс истекает. -
Catch
ViewExpiredExceptionвweb.xml:<error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/index.jsf</location> </error-page>Этот подход автоматически перенаправит запрос на заданный
<location>, когда был запущен запросPOST(h:commandButton,h:commandLinkи т.д.), в то время как срок действия сеанса истек.
Обратите внимание, что я лично предпочел бы промежуточную страницу предупреждения "Session Expired" или предупреждение, чтобы избежать "wtf?". опытом и, таким образом, улучшить работу пользователей. Более того, я бы предпочел каждую минуту активировать адиаксический опрос, когда клиент показал активность, прослушивая click и keypress, так что время жизни сеанса может быть отложено больше.
Ответ 2
Вы можете использовать Filter, чтобы поймать конкретное исключение, указывающее время ожидания, и перенаправить оттуда.
Ответ 3
JSF2:
<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>