4

セッションタイムアウトを処理できるように、すべての 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';
    }
});

どんな助けでもいただければ幸いです

4

3 に答える 3

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);
};

どこかに保管するために、stackoverflowで見つけようとしましたが、古いバージョンのみ..誰かがこれが役立つことを願っています.

于 2014-05-22T17:04:15.613 に答える
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);
   };
于 2013-02-08T21:17:50.067 に答える
2

Primefaces にはajaxStatus、この目的に使用できるコンポーネントがあります。ドキュメントを読んで詳細を確認してください。ただし、ユースケースでは、次のようになります。

<p:ajaxStatus oncomplete="ajaxStatusHandler(xhr, status, args)"/>

JavaScript 関数をそのまま使用できます。

function ajaxStatusHandler(xhr, status, args) {
  // your code ...
}

注: このメソッドは、グローバル AJAX リクエスト (PrimeFaces のデフォルト) にのみ使用できます。また、クロスドメイン スクリプトまたはJSONP (パディング付きの JSON) リクエストをグローバルにすることはできません。

于 2013-02-08T10:51:48.317 に答える