我正在使用JSF RI 1.1。如果发生会话超时,如何重定向到索引页?
答案 0 :(得分:44)
有两种方法可以组合:
使用HTML <meta>
元素中的<head>
刷新标头与HttpSession#getMaxInactiveInterval()
结合使用,返回会话尚未生效的剩余秒数。
<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">
会话到期时,此方法会自动将页面重定向到给定的url
。
在web.xml
中抓住ViewExpiredException
:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/index.jsf</location>
</error-page>
当会话过期时,<location>
请求被触发(POST
,h:commandButton
等)时,此方法会自动将请求转发给给定的h:commandLink
。
请注意,我个人更喜欢中间的“会话过期”警告页面或警告,以避免“wtf?”体验,从而改善用户体验。更重要的是,当客户通过聆听click
和keypress
来展示活动时,我宁愿每分钟发起一次ajaxical民意调查,以便会话的生命周期可以推迟更多。
答案 1 :(得分:6)
您可以使用Filter
来捕获指示超时的特定异常,并从那里重定向。
答案 2 :(得分:5)
JSF2:
<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>