Primefaces:所有ajax请求的默认oncomplete方法

Kun*_*alC 4 ajax jquery primefaces

我正在尝试为所有ajax请求配置一个oncomplete方法,以便我可以处理会话超时.

我尝试添加以下脚本但它的工作方式与为p:ajax元素设置oncomplete属性的方式不同.每次发出Ajax请求时都不会执行.

$.ajaxSetup({method: post,
    complete: function(xhr, status, args){
        var xdoc = xhr.responseXML;
        if(xdoc == null){
            return;
        }
        errorNodes = xdoc.getElementsByTagName('error-name');

        if (errorNodes.length == 0) {
            return;
        }

        errorName = errorNodes[0].childNodes[0].nodeValue;
        errorValueNode = xmlDoc.getElementsByTagName('error-message');
        errorValue = errorValueNode[0].childNodes[0].nodeValue;

        alert(errorValue);
        document.location.href='${pageContext.request.contextPath}/login/login.jsf';
    }
});
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

Sim*_*ego 6

PrimeFaces更新版本(在这里使用PF 5)

var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.Request.send;
PrimeFaces.ajax.Request.send = function(cfg) {
    if (!cfg.oncomplete) {
        cfg.oncomplete = doYourStuff;
    }
    originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
};
Run Code Online (Sandbox Code Playgroud)

只是为了保持它的位置,试图找到stackoverflow但只有旧版本..希望有人发现这有用.


Kun*_*alC 5

我设法通过包装Primefaces AjaxUtils方法来实现这一点.

var originalPrimeFacesAjaxUtilsSend = PrimeFaces.ajax.AjaxUtils.send;

   PrimeFaces.ajax.AjaxUtils.send = function(cfg) {
      if (!cfg.oncomplete) {
         // register default handler
         cfg.oncomplete = oncompleteDefaultHandler;
      }
      originalPrimeFacesAjaxUtilsSend.apply(this, arguments);
   };
Run Code Online (Sandbox Code Playgroud)