2

私は以下のようなことを試みていました-

<h:commandButton id="btnOK">
     <f:ajax event="action" execute="@this" render="idHeader"       
listener="#{myBean.actionSubmit()}"/>
</h:commandButton>

そして、そのajaxリクエストが完了したら、UIでいくつかの処理を実行します。そのために次のjQueryコードを使用しています。

$(document).ajaxComplete(function() {
    $.modal.close();
});

しかし、私の問題は、jQueryメソッドがまったく起動されないことです。JSF ajax送信によってajaxCompleteイベントが発生するかどうか疑問に思っていますか?

4

2 に答える 2

4

標準の JSF impl は、jQuery API を使用して ajax リクエストを送信しません。JSF は、自動インクルード ファイルにある独自の内部 API を使用しjsf.jsます。したがって、jQueryjQuery.ajaxComplete()が呼び出されることはありません。$.ajax()jQuery (およびそのショートカット、、$.get()など$.post()) が使用されている場合にのみ呼び出されます。PrimeFaces with<p:commandXxx>やなど、jQuery ベースのコンポーネント ライブラリのみがそれらを使用します<p:ajax>。標準の JSF<f:ajax>の場合、代わりに JSF 独自のjsf.ajax.addOnEvent()ハンドラーを使用するか、 のonevent属性を使用する必要があります<f:ajax>

あなたの特定のケースでは、onevent属性はより簡単だと思います:

<f:ajax ... onevent="btnOKhandler" />

function btnOKhandler(data) {
    if (data.status == 'success') {
        $.modal.close();
    }
}

は 、 、 の 3 つの値をdata.status持つことができます。JSF 仕様の表 14-4 および 14-3 も参照してください。begincompletesuccess

以下も参照してください。

于 2012-05-10T13:20:21.227 に答える