在JSF中长时间处理期间防止会话超时

时间:2010-12-24 08:42:13

标签: jsf session-timeout

我一直在研究JSF应用程序。在一个地方,我要在托管bean中调用一个动作。在处理完成之前,该操作实际上处理了数百条记录和会话超时。

虽然所有记录都已成功处理,但会话过期,用户将被发送到登录页面。

我尝试添加

session.setMaxInactiveInterval(0);

在处理记录之前没有效果。

如何在此过程中防止会话超时。

2 个答案:

答案 0 :(得分:10)

只要enduser在webbrowser中打开页面,就会引入ajaxical民意调查以使会话保持活动状态。这是jQuery的一点帮助的启动示例。

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        setInterval(function() {
            $.get('poll');
        }, ${(pageContext.session.maxInactiveInterval - 10) * 1000});
    });
</script>

这里${pageContext.session.maxInactiveInterval}返回会话尚未生存的剩余秒数(并且已被扣除10秒 - 只需要与poll一起准时 - 并转换为毫秒,以使其适合{{3}期待)。

setInterval()应该调用映射在url-pattern /poll上的servlet,并且doGet()方法中基本上包含以下行。

request.getSession(); // Keep session alive.

就是这样。

答案 1 :(得分:0)

要防止会话超时,请尝试使用线程进行处理。

通过这种方式,用户将能够做其他活动&amp;不要等待该过程完成。