【问题标题】:RequestContext and Ajax status in PrimeFacesPrimeFaces 中的 RequestContext 和 Ajax 状态
【发布时间】:2013-07-26 12:16:21
【问题描述】:

我需要处理全局 ajax 响应。当我只想在没有任何参数的情况下调用正常的 javascript 操作时,一切正常,开箱即用。比我可以使用 p:ajaxStatus 控件,并且应用程序以正确的方式运行。

我现在真正需要做的是处理在 ajax 请求期间有 externalContext.redirect() 调用的情况。它在应用程序中只发生在一个地方,但它是从许多地方调用的。 我在想,我可以例如在 RequestContext 中添加回调参数。但是如何在 javascript 中访问这个参数呢?

在 firebug 中观看时,我可以看到 callbackParam 在 json 响应中返回,但是如何在 javascript 中访问该值?

【问题讨论】:

    标签: javascript jsf primefaces


    【解决方案1】:

    它已被添加为默认args 对象的属性,该对象在oncomplete 上下文中可用。

    所以,例如

    RequestContext.getCurrentInstance().addCallbackParam("foo", "bar");
    

    可作为

    oncomplete="console.log(args.foo)"
    

    另见:


    更新:根据 cmets,结果在 <p:ajaxStatus> 中失败。我建议将其作为错误报告给 PF 人员,<p:ajaxStatus oncomplete> 中没有这些参数。同时,您可以使用由<h:outputScript target="head"><h:body> 中加载的以下脚本来解决它(以保证它在 PrimeFaces 脚本之后加载):

    var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.AjaxUtils.send;
    PrimeFaces.ajax.AjaxUtils.send = function(cfg) {
        var originalOncomplete = cfg.oncomplete;
        cfg.oncomplete = function() {
            ajaxStatusOncomplete.apply(this, arguments);
    
            if (originalOncomplete) {
                originalOncomplete.apply(this, arguments);
            }
        };
        originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
    };
    
    function ajaxStatusOncomplete(xhr, status, args) {
        // Do your thing here.
    }
    

    【讨论】:

    • 当在按钮上下文中处理 ajax 回调时,CommandButton 的答案是正确的。在 AjaxStatus 中,这种方法不起作用。
    • 转载。这可能是<p:ajaxStatus> 中的一个错误。我会寻找解决方法并更新答案。
    • 谢谢BalusC,你的答案正是我想要的。感谢您的解决方案,我实现了我的目标。再次感谢!
    【解决方案2】:

    在 p:ajaxStatus 参数中可通过 PrimeFaces.ajax.Queue.xhrs 获得 例如:

    oncomplete="console.log(PrimeFaces.ajax.Queue.xhrs[0].pArgs.foo)"
    

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 2013-07-30
      • 2016-10-21
      相关资源
      最近更新 更多