2009-09-02 22 views
11

Tôi hiện đang cố gắng xác thực một số giá trị front-end với một số phương thức phía máy chủ (dưới dạng nhóm) và đang chạy vào các vấn đề liên quan đến kết quả.Cách truy cập chính xác trường dữ liệu trong a4j: jsChức năng kết quả

Đây là XHTML cho nút bắt đầu nó tất cả:

<h:commandButton action="#{Bean.save()}" 
     value="Save" 
      id="save" 
     onclick="checkForConfirmation();" /> 

Và javascript, một phần trong đó các cuộc gọi nút, phần khác trong đó JsFunction gọi

function checkForConfirmation() 
{ 
     var name = document.getElementById("path:to:name").value; 
     var address = document.getElementById("path:to:address").value; 
     var city = document.getElementById("path:to:city").value; 
     var state = document.getElementById("path:to:state").value; 
     var zip = document.getElementById("path:to:zip").value; 

     jsFunc1(name, address, city, state, zip); 
} 
function showConfirmPrompt() 
{ 
      if(confirm('Confirmation before save')) 
      { 
       return true; 
      } 

      return false; 
} 

Và cuối cùng, jsFunction là mảnh có vấn đề:

<a4j:form> 
     <a4j:jsFunction name="jsFunc1" action="#{Bean.shouldBeConfirmed()}" data="#{Bean.booleanResult}" oncomplete="alert(data); if (data) {showConfirmPrompt();}"> 
      <a4j:actionparam name="param1" assignTo="#{Bean.nameToBeValidated}"/> 
      <a4j:actionparam name="param2" assignTo="#{Bean.addressToBeValidated}"/> 
      <a4j:actionparam name="param3" assignTo="#{Bean.cityToBeValidated}"/> 
      <a4j:actionparam name="param4" assignTo="#{Bean.stateToBeValidated}"/> 
      <a4j:actionparam name="param5" assignTo="#{Bean.zipToBeValidated}"/> 
     </a4j:jsFunction> 
    </a4j:form> 

Vấn đề là, để ngăn chặn sự kết thúc của chuỗi sự kiện này, cảnh báo (dữ liệu) trong thuộc tính 'không đầy đủ' cho thấy rằng dữ liệu không được xác định. Tôi cần điều này để được xác định để biết có hay không hiển thị một cuộc đối thoại cảnh báo.

Tôi có thể xác nhận rằng phương thức Bean.shouldBeConfirmed() thực sự đang chạy, và với thông số đúng, và thực sự trả lại giá trị chính xác, và thậm chí đặt giá trị của biến Bean.booleanResult (đây là một boolean java bình thường). Tôi làm gì sai ở đây?

Trả lời

12

Mặc dù đây là một câu hỏi rất cũ, tôi đã gặp vấn đề tương tự với Richfaces 4 M3. Các tham số được Yev đề xuất không hoạt động. Vì vậy, hãy gọi đến sốcủa richfaces. Theo đó, nó là một lỗi (mà đang ở chế độ "sẽ không sửa chữa", không biết tại sao!) Vì vậy, bây giờ thực hiện giải pháp là sử dụng event.data thay vì data trong xử lý oncomplete. Tôi đã thử nghiệm và nó hoạt động :)

+0

Đây là câu hỏi phổ biến nhất của tôi. Tôi đoán rất nhiều người đang gặp vấn đề này. Chúc mừng bạn đã tìm được giải pháp và cảm ơn bạn đã chia sẻ nó! – Ben

+0

Bạn được chào đón :) Thật vậy, đây là một vấn đề rất phổ biến! Tôi tự hỏi tại sao cộng đồng JBoss không tài liệu về gotchas như thế này ở một nơi. – Nikhil

+2

Tại sao không bao gồm trong hướng dẫn di chuyển? Điều này đã giúp tôi rất nhiều, cảm ơn bạn. KHÔNG ĐƯỢC CỐ ĐỊNH TRONG 4.1 – Toskan

2

Tôi có nó chính xác như thiết lập của bạn và nó hoạt động cho tôi. Điểm khác biệt duy nhất là, tôi có các thuộc tính phụ trên jsFunction:

<a4j:form> 
    <a4j:jsFunction name="jsFunc1" 
     action="#{Bean.shouldBeConfirmed()}" 
     data="#{Bean.booleanResult}" 
     oncomplete="alert(data);" 
     ignoreDupResponses="true" 
     eventQueue="foo"> 
     ... 

Và dữ liệu của tôi (booleanResult) là một int. Hoạt động tốt.

1

tôi cũng đã phải đối mặt với cùng một vấn đề .. Trong trường hợp kết quả Boolean chúng ta cần phải ghi rõ họ tên đầy đủ phương pháp thay vì loại bỏ getter ... như trong trường hợp của bạn nó sẽ là # {} Bean.isBooleanResult .... Hãy cho tôi biết nếu vấn đề về mặt ...

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