Я использую 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"/>