我正在使用JSF-richfaces开发应用程序。
该应用程序具有标准登录页面,会话管理和会话过期时间为15分钟。
其中一个要求是,当会话过期并且用户点击任何链接时,我需要显示一个弹出窗口(而不是进入登录页面),它会显示“你的会话已过期,请再次登录”
如果是单个链接,我可以使用a4j来检查会话是否过期。 但在我的情况下,我需要为每个链接和按钮显示“会话输出”警报。
任何指向这一点都将有助于我继续前进。
提前谢谢。
答案 0 :(得分:4)
如果会话超时为15分钟,您只需设置一个将显示弹出窗口的Javascript调用(使用setTimeout
方法)。如果用户点击一个链接,Javascript调用将被重置,因此只有当用户在同一页面上停留至少15分钟时才会显示弹出窗口。
你可以试试这样的东西:
<a4j:outputPanel ajaxRendered="true">
<script type="text/javascript">
setTimeout("Richfaces.showModalPanel('xxx');", 900000);
</script>
</a4j:outputPanel>
说明:
我们将Javascript代码封装在<a4j:outputPanel>
属性设置为ajaxRendered
的{{1}}组件中。这样,即使用户单击Ajax链接,也会重置Javascript超时。
然后,我们将超时设置为15分钟(然后是900000毫秒),直到显示模态面板。
如果您使用Facelets,我建议您将此代码(以及modalPanel)也放在模板中。然后,该模板将用于您应用程序的每个页面......
答案 1 :(得分: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>
答案 2 :(得分:1)
Richfaces可以通过定义自己的JS函数来处理会话过期(以及其他错误),该函数在情况发生时执行。