2012-01-19 17 views
3

私はajaxリクエストを監視し、特定の状況でそれらを中止する中心的な場所を持っていたいと思います。jsf.ajax.addOnEvent()からJSF Ajaxリクエストを中止する

私が知らないのは、実際には1つの中央機能からのAjax要求を中止することだけです。

jsf.ajax.addOnEvent(function(data) { 
    if (data.status === 'begin') { 
     // abort the ajax request 
    } 
}); 

をしかし、私は誤解されるかもしれません:

私は解決策は、このようになりますことを想像してください。

ありがとうございます!

答えて

3

これは、標準JSF JS APIでは不可能です。あなたの最善の策は、呼び出すJSFコンポーネントにonclickまたはonchangeハンドラを追加することです。このハンドラは、ajaxリクエストを中止するための条件が満たされた場合にfalseを返します。共通セレクタに(使用jQueryのバージョンに応じて、またはjQuery.delegate()またはjQuery.live()jQuery.on()と離れてこの抽象必要な場合は、できる

<h:commandButton onclick="return mayFireAjax(this)"> 
    <f:ajax /> 
</h:commandButton> 

あなたはすべての所望の成分にそれを繰り返す必要はありませんように。

$(someSelector).on("click", function() { 
    return mayFireAjax(this); 
}); 
1

ソースを制御している場合は、常にonClickをUICommandコンポーネントに添付できます。しかし、状況によっては、ソースにアクセスできません。たとえば、ajaxはサードパーティ製のコンポーネントによって提供されます。あなたはそれらの構成要素を台無しにしたくありません。

まず、小さなjsライブラリがあります。

var FxJSFBegin = "JSFBegin"; 

if (jsf) { 

    var originalRequest = jsf.ajax.request; 

    jsf.ajax.request = function(source, oevent, options) { 

     var event = $.Event(FxJSFBegin); 

     event.options = options; 

     event.originalEvent = oevent; 

     $(source).trigger(event); 

     if (event.isDefaultPrevented()) { 

      return; 

     } else { 

      originalRequest.apply(null, arguments); 

     } 

    }; 

} 

このピースコードはオリジナルのJSF ajax呼び出しをプロキシします。 jQueryを使用して「JSFBegin」イベントを発生させます。統合コードはjQueryメカニズムを使用してこのイベントを聴くことができます。リスナーはevent.preventDefault()を使用してjsf呼び出しを取り消すことができます。

要件:jsf.jsがロードされた後

  1. jQueryの
  2. この作品コードを配置する必要があります。
関連する問題