2011-10-25 3 views
4

h:inputText 태그 안에 xupx 이벤트를 호출하는 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 요청을 시작하고 포인트에 입력 된 입력이 포함됩니다. 그러나 각 문자 을 입력하면 아약스 요청을 발생시키지 않습니다.

<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> 

원격으로 원하는대로 할 수 있습니까?

편집 : 또 다른 제안은 Richfaces 4 a4j : 대기열 기능을 체크 아웃하는 것입니다. 예를 들어 이 키보드에 기대어있는 경우 키 업 시나리오에서 이벤트를 결합 할 수 있습니다. 현재 Ajax 요청이 하나만 완료되면 요청이 전송됩니다. 요청 지연을 지정하고 오래된 응답을 무시할 수도 있습니다. 응답. Richfaces가하지 않은 큰 실수 (primefaces가 만드는)는 RF가 JSF 구현과 동일한 기본 대기열을 사용하기 때문에 순서가 잘못된 처리 이 발생하지 않는다는 것입니다.

이 라이브러리를 아직 사용하고 있지 않다면 받아 들여야 할 작은 단계가 아닙니다.

+0

감사합니다. 오버 스티어 덕분에, 그 동안 내가 결국 끝내게되었습니다 ^^. 며칠 내에 더 나은 솔루션이 게시되지 않으면 나는 그것을 고수하고 현상금을 수여 할 것입니다. – kgautron