如果在jsf应用程序中发生会话超时,如何重定向到索引页面

时间:2010-03-30 05:47:52

标签: jsf

我正在使用JSF RI 1.1。如果发生会话超时,如何重定向到索引页?

3 个答案:

答案 0 :(得分:44)

有两种方法可以组合:

  1. 使用HTML <meta>元素中的<head>刷新标头与HttpSession#getMaxInactiveInterval()结合使用,返回会话尚未生效的剩余秒数。

    <meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=index.jsf">
    

    会话到期时,此方法会自动将页面重定向到给定的url

  2. web.xml中抓住ViewExpiredException

    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/index.jsf</location>
    </error-page>
    

    当会话过期时,<location>请求被触发(POSTh:commandButton等)时,此方法会自动将请求转发给给定的h:commandLink

  3. 请注意,我个人更喜欢中间的“会话过期”警告页面或警告,以避免“wtf?”体验,从而改善用户体验。更重要的是,当客户通过聆听clickkeypress来展示活动时,我宁愿每分钟发起一次ajaxical民意调查,以便会话的生命周期可以推迟更多。

答案 1 :(得分:6)

您可以使用Filter来捕获指示超时的特定异常,并从那里重定向。

答案 2 :(得分:5)

JSF2:

<meta http-equiv="refresh" content="#{facesContext.externalContext.sessionMaxInactiveInterval};url=#{request.contextPath}/index.xhtml"/>