【问题标题】:JSF 1.2 AJAX Redirect to URLJSF 1.2 AJAX 重定向到 URL
【发布时间】:2015-03-06 06:08:58
【问题描述】:
我有一个要求,我们需要重定向到 JSF 1.2 Ajax 调用的页面。在我们的例子中,我们需要在会话过期后触发 ajax 调用时重定向到会话过期页面。我们正在过滤器中实现会话过期检查,并且 httpservletresponse.sendRedirect 的调用按预期正确重定向到会话过期页面,但 url 没有改变,这是现在的问题。
高度赞赏客户端/服务器端的任何提示/解决方案。
~拉格什
【问题讨论】:
标签:
javascript
ajax
jsf-1.2
ajax4jsf
【解决方案1】:
最后我设法找到了解决上述问题的方法。
在过滤器中,我设置了响应标头 "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 提供的内置处理。
如果您发现此解决方案有任何限制或对此问题有更好的解决方案,请告诉我
~拉格什