2011-01-11 29 views
5

Trang của tôi bao gồm một số khu vực được tạo bằng cách lặp qua danh sách các mục bằng cách sử dụng <ui:repeat>. Hãy tưởng tượng ví dụ đơn giản này:JSF 2.0: Hiển thị lại/cập nhật một mục duy nhất trong ui: lặp lại bằng cách sử dụng AJAX

<h:form id="form">  
    <ui:repeat id="repeatContainer" var="item" value="#{testBean.items}" varStatus="status"> 
     <h:outputText value="#{item.title}: "/> 

     <!-- I want to re-render only a single one of these fields --> 
     <h:outputText id="valueContainer" value="#{item.value}"/><br/>   
    </ui:repeat> 
</h:form> 

Bây giờ, tôi muốn tái render (chỉ) các valueContainer của một yếu tố cụ thể trong danh sách này sử dụng AJAX (nói, yếu tố với chỉ số 1). Tôi đã thử tất cả các kết hợp mà không cần bất kỳ may mắn:

<!-- Works, but renders all items: --> 
<f:ajax render=":form"/> 

<!-- This is what I actually want to achieve (does not work, comp. not found): --> 
<f:ajax render=":form:repeatContainer:1:valueContainer"/> 

<!-- Does not work (component not found): --> 
<f:ajax render=":form:repeatContainer"/> 

<!-- Does not work (component not found): --> 
<f:ajax render=":form:repeatContainer:1"/> 

<!-- Does not work (component not found): --> 
<f:ajax render=":form:1"/> 

<!-- Does not work (component not found): --> 
<f:ajax render=":form:1:valueContainer"/> 

<!-- Does not work (no error message, but does nothing): --> 
<f:ajax render=":form:repeatContainer:valueContainer"/> 

yêu cầu của tôi bao gồm:

  • tôi cần phải xác định các thành phần để tái render với một định tuyệt đối đường, bởi vì nút mà kích hoạt bản cập nhật ở đâu đó hoàn toàn khác trong thành phần cây.
  • Re-render toàn bộ trang hoặc hình thức (sử dụng @all/@form) được vô ích với tôi, bởi vì đó là loại đặt ra câu hỏi tại sao tôi đang sử dụng JSF/AJAX ở tất cả ...
  • tôi cần để đạt được điều tương tự với PrimeFaces <p:dataGrid> tế bào (tức là chỉ cập nhật một thành phần phụ cụ thể của một ô cụ thể), nhưng tôi giả định rằng điều này làm giảm cùng một vấn đề.

Tôi đoán phải có một giải pháp dễ dàng cho điều này mà tôi hiện đang xem?

Trả lời

0

Dường như điều này là do hai lỗi riêng biệt trong Mojarra 2.0.2. Các chủ đề thảo luận sau đây là một vấn đề có liên quan: How to refer to dataTable parent within the dataTable?

Trong trường hợp của tôi, tôi đang sử dụng PrimeFaces <p:dataGrid> thay vì <h:dataTable>, nhưng nó dường như bị các triệu chứng tương tự. Các tài liệu tham khảo chỉ thất bại. Tôi cho rằng điều này liên quan đến một lỗi trong UIComponent#findComponent() hoặc các phương thức cơ bản của việc triển khai JSF.

Có vẻ như không có giải pháp cho vấn đề này vào lúc này ... ngoại trừ việc chờ triển khai JSF được sửa ... nếu ai đó có thêm đề xuất, vui lòng thêm chúng.

0

Vấn đề có thể được giải quyết bằng cách đặt mẫu tại một thủ phải đối mặt với p: outputPanel và thiết lập tự động cập nhật true

+0

Xin lỗi, nhưng tôi không thấy làm thế nào mà trả lời câu hỏi. Đặt biểu mẫu trong p: outputPanel sẽ không giúp cập nhật các hàng riêng lẻ. – sleske

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