2011-01-01 31 views
23

Dưới đây là cách bố trí của tôiJSF + PrimeFaces: `thuộc tính update` không cập nhật phần

<div id="mainPanel"> 
    <div id="padding"> 
     <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/> 
    </div> 
    <div id="right"> 
     <h:form> 
      <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update="text" /> 
     </h:form> 
    </div> 
</div> 

Khi tôi bấm vào liên kết Update, mà là vụ để chuyển renderComment boolean và tắt, nó không chuyển đổi các hiển thị văn bản Personal Feed. Bây giờ, nếu tôi đặt một biểu mẫu quanh h:outputText và thay vào đó, update thay vào đó là form thì nó hoạt động. Tại sao vậy?

Trả lời

57

Thuộc tính update phải trỏ đến ID khách hàng hiện tại trong cây DOM HTML. Tuy nhiên, vì phần tử không có sẵn trong cây DOM HTML vì nó không được phía máy chủ trả về, JS/ajax không thể tìm thấy bất kỳ thứ gì trong cây DOM HTML để cập nhật.

Thực tế, bạn nên bọc nó trong phần tử khác luôn có sẵn trong cây DOM HTML để Ajax có thể định vị nó và sau đó sử dụng ID ứng dụng khách trong update. Trong trường hợp của bạn, bạn có thể sử dụng padding cho việc này.

<div id="mainPanel"> 
    <h:panelGroup id="padding" layout="block"> 
     <h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/> 
    </h:panelGroup> 
    <div id="right"> 
     <h:form> 
      <p:commandButton value="Update" actionListener="#{bean.toggleComment}" update=":padding" /> 
     </h:form> 
    </div> 
</div> 
+1

BaluC, ':' có nghĩa là gì trong thuộc tính kết xuất trước 'padding'? Một cấp lên? – rozerro

+0

@rozerro: http://stackoverflow.com/q/8634156 – BalusC

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