JSF - Richfaces - 如何知道会话是否超时(在客户端上)

时间:2009-08-08 13:54:11

标签: session jsf richfaces

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

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

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

如果是单个链接,我可以使用a4j来检查会话是否过期。 但在我的情况下,我需要为每个链接和按钮显示“会话输出”警报。

任何指向这一点都将有助于我继续前进。

提前谢谢。

3 个答案:

答案 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函数来处理会话过期(以及其他错误),该函数在情况发生时执行。

Richfaces guide