2010-02-23 2 views
5

검색 필드로 datatable을 가진다. Enter 키를 누를 때, 그리고 다시 렌더링 될 DataTable과 함께 백업 빈의 메소드가 호출되기를 원합니다.JSF가 ENTER 키에서 backing bean 메소드와 reRender 컴포넌트를 호출한다.

내 접근 방식은 지금까지 IE 6에서만 작동하고 7에서는 FF가 아닙니다. 이것은 InputText]를하다 :

<h:inputText 
value="#{applicantProductListBean.applicantNameFilterValue}" 
id="applicantNameFilterValue" onkeypress="submitByEnter(event)"> 
</h:inputText> 

이 내가 호출하고 자바 스크립트 방법 :

function submitByEnter(e){ 
if(e.keyCode==13){ 
     // alert("Enter was pressed"); 
     e.returnValue=false; 
     e.cancel=true; 
     document.getElementById("applicantProductListForm:refreshButton").click(); 
} 
} 

당신이 볼 수 있듯이, 자바 스크립트 방법 페이지에 존재하는 버튼 새로 고침을 클릭 :

<a4j:commandButton value="Refresh" id="refreshButton" 
action="#{applicantProductListBean.refreshData}" 
image="/images/icons/refresh48x48.gif" 
reRender="table, scroller"> 
</a4j:commandButton> 

refreshData 메서드는 아무 것도 반환하지 않습니다. 이전에 말했듯이 이것은 IE 6와 IE 7에서만 작동합니다.

FF로 작동하지 않는 이유를 아는 사람이 있습니까?

내가 생각했던 대안은 바로 이지만의 Enter 이벤트를 잡을 수있는 핫키 였기 때문에 자바 스크립트 만 호출 할 수 있으므로 적절하지 않습니다.

RichFaces 또는 일반 JSF를 통해 적절한 방법이 있습니까?

건배!

UPDATE : 약간 BalusC하여 답을 수정

, 작동하는 스크립트는 다음과 같습니다

if (event.preventDefault) { 
// Firefox 
event.preventDefault(); 
} else { 
// IE 
event.returnValue = false; 
} 

답변

4

하여 JS 블록을 교체하십시오 :

function submitByEnter(e){ 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
     document.getElementById("applicantProductListForm:refreshButton").click(); 
    } 
} 

이상,

function submitByEnter(e){ 
    if (e.keyCode == 13) { 
     document.getElementById("applicantProductListForm:refreshButton").click(); 
     return false; 
    } else { 
     return true; 
    } 
} 

및 입력의 onkeypress

onkeypress="return submitByEnter(event)" 

에 의해 문제가 해결되지 않으면, 예상대로 JS 코드가 작동하는지 확인 Firebug의 JS 디버거를 실행합니다.

<h:panelGrid onkeypress="searchByEnterAndReturn(event)"> 
    <b:aCustomComponent value="#{evolutionBackingAction.value}" id="someID"/> 
</h:panelGrid> 

<a4j:commandButton value="Search Now" action="search" id="searchButton"/> 

<script type="text/javascript"> 
    function searchByEnterAndReturn(e){ 
     if(e.keyCode==13){ 
      document.getElementById("generalForm:pageHeader:searchButton").click(); 
     } 
    } 
</script> 

이 작동하지만이 searchButton 아이디 자체 내 페이지의 소스 코드를 검색했습니다 내 검색 버튼의 ID를 찾으려면 찾을 수 없습니다 :

+0

첫 번째 작업. 고마워요! –

+0

당신을 진심으로 환영합니다. 그러나 (오래된) 브라우저에서는 작동하지 않습니다. 지원해야하는 모든 브라우저에서 테스트 해보십시오. – BalusC

+0

나는 (나는 preventDefault가 있는지 확인하고 그것을 호출하거나 returnValue를 false로 설정한다) 업데이트를했다. 필자는 IE6, IE7, FF로 테스트했습니다. –

0

나를 위해 일했다 팔로우 !

customComponent에서이 작업을 수행 할 수 있었지만이 구성 요소의 소스 코드를 제어 할 수 있으며 onkeypress 메서드가 구현되지 않았습니다.

관련 문제