我正在使用 JSF-richfaces 开发应用程序。
该应用程序具有标准的登录页面、会话管理和会话过期时间为 15 分钟。
其中一个要求是,当会话到期并且用户单击任何链接时,我需要显示一个弹出窗口(而不是进入登录页面),其中会显示“您的会话已过期,请重新登录”。
如果它是单个链接,我可以使用 a4j 检查会话是否过期。但就我而言,我需要为每个链接和按钮显示“会话结束”警报。
对此的任何指示都将帮助我继续前进。
先感谢您。
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)放在模板中。然后,此模板将用于您的应用程序的每个页面...
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>
Richfaces 可以通过定义您自己的 JS 函数来处理会话过期(和其他错误),该函数在情况发生时执行。