2010-02-23 27 views
5

Tôi có thể đặt dữ liệu với các trường tìm kiếm. Tôi muốn một phương thức trên bean sao lưu được gọi khi phím ENTER được nhấn, cũng như DataTable được trả lại.JSF gọi phương thức sao lưu bean và các thành phần reRender trên phím ENTER

Cách tiếp cận của tôi cho đến nay chỉ hoạt động trong IE 6 và 7, không hoạt động trong FF. Đây là inputText:

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

và đây là phương pháp Javascript Tôi gọi:

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

Như bạn có thể thấy, phương pháp Javascript nhấp chuột vào nút refresh, mà tồn tại trên trang:

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

Phương thức làm mớiData không trả lại bất kỳ điều gì. Như đã nói trước đây, điều này chỉ hoạt động trong IE 6 và IE 7.

Có ai biết tại sao nó không hoạt động trong FF không?

Cách thay thế mà tôi đang xem xét là HotKey, thực sự có thể bắt sự kiện ENTER, nhưng nó chỉ có thể gọi Javascript, vì vậy nó không thích hợp.

Cách thích hợp để thực hiện điều này thông qua RichFaces hoặc JSF thuần túy?

Chúc mừng!

UPDATE:

Hơi sửa đổi câu trả lời bằng cách BalusC, kịch bản mà làm việc là:

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

Trả lời

4

Hãy thử thay thế các khối JS bởi:

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

hoặc tốt hơn,

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

và của onkeypress bởi

onkeypress="return submitByEnter(event)" 

Nếu điều đó không làm việc đầu vào, chạy trình gỡ lỗi JS của Firebug để xem mã JS cư xử như mong đợi.

+0

Người đầu tiên làm việc. Cảm ơn người đàn ông! –

+0

Bạn được chào đón. Tuy nhiên, nó sẽ không hoạt động trên (rất) các trình duyệt cũ. Kiểm tra nó trong tất cả các trình duyệt bạn đang hỗ trợ. – BalusC

+0

Tôi đã thực hiện cập nhật (tôi kiểm tra xem ngăn chặnDefault tồn tại và gọi nó hoặc đặt returnValue thành false). Tôi đã thử nghiệm nó trong IE6, IE7, FF. –

0

Sau đây đã làm việc cho tôi:

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

này hoạt động, nhưng để tìm ID của nút tìm kiếm của tôi, tôi đã phải tìm kiếm thông qua các mã nguồn của trang web của tôi như id Album ảnh tự nó không thể được tìm thấy !

Tôi có thể thực hiện việc này trên customComponent nhưng tôi có quyền kiểm soát mã nguồn của thành phần này và phương pháp onkeypress không được triển khai.

Các vấn đề liên quan