Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
session.maxInactiveInterval和AJAX don';相处不好_Ajax_Jsf_Redirect_Session Timeout - Fatal编程技术网

session.maxInactiveInterval和AJAX don';相处不好

session.maxInactiveInterval和AJAX don';相处不好,ajax,jsf,redirect,session-timeout,Ajax,Jsf,Redirect,Session Timeout,我有一个使用PrimeFaces5.1的JSF网页,我想在会话过期后重定向到某个xhtml页面 我在web.xml中将会话超时设置为1分钟(用于测试,在测试之后将设置为30分钟) <session-config> <session-timeout>1</session-timeout> </session-config> 1. 我补充说 <meta http-equiv="refresh" content="#{session.

我有一个使用PrimeFaces5.1的JSF网页,我想在会话过期后重定向到某个xhtml页面

我在web.xml中将会话超时设置为1分钟(用于测试,在测试之后将设置为30分钟)

<session-config>
    <session-timeout>1</session-timeout>
</session-config>

1.
我补充说

<meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=#{request.contextPath}/season_expired.xhtml"/>

应用程序每个页面上使用的默认模板的

在大多数情况下(当我在页面之间移动等…)一切都很好,除了使用某种表单时,每次刷新都是由AJAX完成的。一分钟后我就被重定向了

有没有一种使用AJAX“刷新”会话的方法?

您可以使用JS来完成在发出AJAX请求时可以清除的任务。您可以使用注册全局ajax事件侦听器函数

<script>
    var redirectToExpired = function() { window.location='#{request.contextPath}/expired.xhtml' };
    var expireTimeMillis = 5000;
    
    window.redirectOnExpire = setTimeout(redirectToExpired, expireTimeMillis);
    jsf.ajax.addOnEvent(function(data) {
        if (data.status == 'begin') {
            clearTimeout(window.redirectOnExpire);
            window.redirectOnExpire = setTimeout(redirectToExpired, expireTimeMillis);
        }
    });
</script>

var redirectToExpired=function(){window.location='{request.contextPath}/expired.xhtml'};
var expireTimeMillis=5000;
window.redirectOnExpire=setTimeout(redirectToExpired,expireTimeMillis);
addOnEvent(函数(数据){
如果(data.status=='begin'){
clearTimeout(window.redirectOnExpire);
window.redirectOnExpire=setTimeout(redirectToExpired,expireTimeMillis);
}
});
与meta refresh标题一样,这有点幼稚,因为当您在多个浏览器选项卡中打开同一个webapp时,它不会很好地工作。在“遗忘”选项卡中,当您在另一个选项卡中的同一webapp上处于活动状态时,重定向仍将在后台发生

更好的方法是不要做所有这些,而是在实际用户操作期间依赖于
viewexpiredeexception
。您可以在如何注册错误页面以及如何在那里使用元刷新头中找到

另见: