【问题标题】:JSF - Richfaces - How to know if the session is timed out (on client)JSF - Richfaces - 如何知道会话是否超时(在客户端)
【发布时间】:2010-11-17 22:45:46
【问题描述】:

我正在使用 JSF-richfaces 开发应用程序。

应用程序有标准的登录页面,会话管理,会话过期时间为 15 分钟。

其中一个要求是,当会话到期并且用户单击任何链接时,我需要显示一个弹出窗口(而不是进入登录页面),其中会显示“您的会话已过期,请重新登录” .

如果是单个链接,我可以使用 a4j 检查会话是否过期。 但就我而言,我需要为每个链接和按钮显示“会话结束”警报。

对此的任何指示都将帮助我继续前进。

提前谢谢你。

【问题讨论】:

    标签: session jsf richfaces


    【解决方案1】:

    RichFaces 提供了另一种在客户端捕获超时 (ViewExpiredException) 的方法。

    首先,在您的 web.xml 中添加以下代码:

        <context-param>
        <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name>
        <param-value>true</param-value>
    </context-param>
    

    最后,在页面上添加一些javascript:

    <script type="text/javascript">
    //<![CDATA[
    A4J.AJAX.onError = function(req, status, message) {
        *window.location.reload();*
    }
    //]]>
    </script>
    

    【讨论】:

      【解决方案2】:

      Richfaces 可以通过定义自己的 JS 函数来处理会话过期(和其他错误),该函数在情况发生的那一刻执行。

      Richfaces guide

      【讨论】:

        【解决方案3】:

        如果会话超时为 15 分钟,您可以简单地设置一个 Javascript 调用(使用setTimeout 方法),该调用将显示一个弹出窗口。如果用户单击一个链接,Javascript 调用将被重置,因此只有当用户在同一页面停留至少 15 分钟时才会显示弹出窗口。

        你可以试试这样的:

        <a4j:outputPanel ajaxRendered="true">
            <script type="text/javascript">
                setTimeout("Richfaces.showModalPanel('xxx');", 900000);
            </script>
        </a4j:outputPanel>
        

        解释:

        我们将 Javascript 代码包装在 &lt;a4j:outputPanel&gt; 组件中,该组件的 ajaxRendered 属性设置为 true。这样,即使用户单击 Ajax 链接,Javascript 超时也会被重置。 然后,我们将超时设置为 15 分钟(然后是 900000 毫秒),直到显示模态面板。

        如果您使用Facelets,我建议您将此代码(以及modalPanel)放在模板中。然后,此模板将用于您应用程序的每个页面...

        【讨论】:

        • 感谢您的回答。这将我的问题解决了 50% 我想实现的其他事情,我想知道当用户单击某个按钮或链接时会话是否有效。如何将按钮/链接点击绑定到一些 javascript 操作?
        猜你喜欢
        • 1970-01-01
        • 2012-04-17
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        相关资源
        最近更新 更多