PrimeFaces中的RequestContext和Ajax状态

时间:2013-07-26 12:16:22

标签: javascript jsf primefaces

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

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

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

2 个答案:

答案 0 :(得分:5)

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

所以,例如

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

的形式提供
oncomplete="console.log(args.foo)"

另见:


更新:根据评论,<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.
}

答案 1 :(得分:0)

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

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