【问题标题】: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 提供的内置处理。

    如果您发现此解决方案有任何限制或对此问题有更好的解决方案,请告诉我

    ~拉格什

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 2013-06-26
      • 2023-03-19
      • 2011-07-02
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多