我有一个要求,我们需要重定向到JSF 1.2 Ajax调用的页面。在我们的例子中,当会话到期后ajax调用被触发时,我们需要重定向到会话过期页面。我们正在过滤器中实现会话到期检查,并且httpservletresponse.sendRedirect的调用正如预期的那样正确地重定向到会话过期页面,但是url没有被更改,这是现在的问题。
客户/服务器端的任何提示/灵魂都非常受欢迎。
〜Ragesh
答案 0 :(得分:0)
最后,我设法找到了解决上述问题的方法。
在过滤器中,我设置了响应标头“Location”以及另一个我将在客户端使用的自定义标头来过滤响应。
过滤代码:
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
httpServletResponse.setHeader("x-timeout-status", "true");
httpServletResponse.setHeader("Location", httpServletResponse
.encodeRedirectURL(sessionexpiryurl));
Richfaces有一个javascript文件,其中包含在Richfaces库中打包的AJAX调用调用期间需要的各种回调。有一个名为“ processResponse ”的回调函数,它将在接收到JSF Ajax组件发起的所有AJAX调用的响应时被调用。我已经利用它来处理重定向功能。
JS代码:
var originalAjaxProcessResponse = A4J.AJAX.processResponse;
A4J.AJAX.processResponse = function(req) {
if (req.getResponseHeader('x-timeout-Status') != undefined && req.getResponseHeader('x-timeout-status') == 'true') {
window.location.href = req.getResponseHeader('Location');
} else {
originalAjaxProcessResponse(req);
}
}
这里我们重写了处理我们特定情况的方法,并将其余的ajax调用响应处理委托给richfaces提供的内置处理。
如果您发现此解决方案有任何限制或更好地解决此问题,请与我们联系
〜Ragesh