JSF 1.2 AJAX重定向到URL

时间:2015-01-08 07:18:42

标签: javascript ajax jsf-1.2 ajax4jsf

我有一个要求,我们需要重定向到JSF 1.2 Ajax调用的页面。在我们的例子中,当会话到期后ajax调用被触发时,我们需要重定向到会话过期页面。我们正在过滤器中实现会话到期检查,并且httpservletresponse.sendRedirect的调用正如预期的那样正确地重定向到会话过期页面,但是url没有被更改,这是现在的问题。

客户/服务器端的任何提示/灵魂都非常受欢迎。

〜Ragesh

1 个答案:

答案 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