3

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

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

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

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

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

先感谢您。

4

3 回答 3

4

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

你可以尝试这样的事情:

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

说明:

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

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

于 2009-08-10T06:31:27.570 回答
2

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>
于 2009-08-18T07:04:49.437 回答
1

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

Richfaces 指南

于 2009-08-12T12:17:01.890 回答