2011-10-25 17 views
4

私はからkeyupイベントのAJAX呼び出しを行う、h:inputTextタグ内f:ajaxタグがキャンセル:は、JSFのAJAX呼び出し

<h:inputText id="searchinput" value="#{tvShowForm.name}"> 
    <f:ajax event="keyup" render="results" listener="#{tvShowForm.search}" /> 
</h:inputText> 

を呼び出すたびに、最初の呼び出しが完了する前に、ユーザが複数の文字を入力したことの十分な時間がかかります。

現在のajaxコール(およびキューに入れられたコール)をキャンセルする方法があるため、最後のkeyupイベントがすぐにajaxコールを実行します。

答えて

4

それはあなたのイベントを合体したいように、例えばこれは、AJAXリクエストを発射する前に 半秒をお待ちしております、その 時点で入力された任意の入力が含まれます聞こえます。しかし、あなたはそれぞれの文字のためのajaxリクエストを打つことはありません と入力してください。

<h:inputText onkeyup="keyupHandler();"/> 
    ... 
    <script> 
    var keystrokeTimeout; 

    keyupHandler = function(event) { 

     var minChars = 4; 
     var len = $(this).val().length; 
     if((len != 0) && (len < minChars)) { 
      return; 
     } 

     var ajaxRequest = function() { 
      jsf.ajax.request('results', null, { 
       execute: 'results', 
       render: 'results' 
      }); 
     } 
     clearTimeout(keystrokeTimeout); 
     keystrokeTimeout = setTimeout(ajaxRequest, 500); // millisecs 
    } 
    </script> 

これは遠隔操作ですか?

EDIT:Richfaces 4 a4j:キュー機能をチェックアウトすることをお勧めします。 キーボードで が傾いている場合、現在のajaxリクエストが完了すると、さらに1回だけ リクエストが送信されます。リクエストの遅延を指定して、古くなった レスポンスを無視することもできます。リッチェスフェイスがしない大きな間違いは、 RFはJSF実装と同じ基本キューを使用するため、アウトオブオーダー処理のリスク がないことです。

このライブラリをまだ使用していないのであれば、それは小さなステップではありません。

+0

ありがとう、Oversteer、それは私がその間にやったことです。 数日後に良い解決策が掲載されない場合、私はそれに固執して賞金を授与します。 – kgautron