2013-02-15 23 views
7

Đây không phải đang làm việc cho tôi:Làm thế nào để tham chiếu p: commandLink trong p: dataTable từ p: blockUI trigger?

<h:form id="wfMgtForm"> 
    . 
    . 
    . 
    <p:dataTable id="wfTable" ..." var="item"> 
     <p:column> 
     . 
     . 
     . 
     </p:column> 
     <p:column> 
      <p:commandLink id="editWatchfolderButtonId" oncomplete="dlgEditWF.show()" update=":editWFForm" process="@none"> 
       <f:param value="#{item.value.ID}" name="editId"/> 
       <h:graphicImage alt="Edit Image" style="border: none" value="./images/edit.png" /> 
      </p:commandLink> 
     </p:column> 
    . 
    . 
    . 
    <p:blockUI block=":wfMgtForm" trigger="editWatchfolderButtonId"> 
     Loading...<br/> 
     <p:graphicImage alt="Loader Image" value="/images/loader.gif"/> 
    </p:blockUI> 
</h:form> 

Các lỗi mà tôi nhận được là:

Cannot find component with identifier "editWatchfolderButtonId".

Khi tôi sử dụng Firebug để tìm kiếm ID, tôi phát hiện ra rằng mỗi hàng có một ID khác nhau:

wfMgtForm:wfTable:0:editWatchfolderButtonId wfMgtForm:wfTable:1:editWatchfolderButtonId wfMgtForm:wfTable:2:editWatchfolderButtonId wfMgtForm:wfTable:3:editWatchfolderButtonId
, vv

Làm thế nào tôi nên tham khảo tự động này tạo ra ID từ số <p:blockUI> của tôi?

Trả lời

10

Các <p:dataTable> cũng là một NamingContainer. Bao gồm cả ID của nó.

<p:blockUI ... trigger="wfTable:editWatchfolderButtonId"> 

Chỉ mục hàng chỉ hiện diện ở phía máy khách chứ không phải ở phía máy chủ nên không liên quan.


Cập nhật: chỉ thử nghiệm nó tại địa phương, nó thực sự ấn định ngoại lệ, nhưng nó đã không kích hoạt giao diện người dùng khối ở tất cả (PrimeFaces 3.5). Trông giống như một lỗi trong PrimeFaces.

Trong khi đó, đặt cược tốt nhất của bạn là để tự kích hoạt nó theo đề nghị của Aksel, nhưng sau đó hơi khác:

<p:commandLink ... onclick="bui.show()" oncomplete="bui.hide()"> 
... 
<p:blockUI widgetVar="bui" /> 
+1

lỗi? ohhh không phải nữa ... – Danijel

+0

Đối với tôi cũng vậy trong phiên bản 3.4.1, không có ngoại lệ nữa, nhưng vẫn không có UI tôi bị chặn. – Danijel

+0

Tổng số này làm giảm trải nghiệm người dùng cho giao diện người dùng của tôi. Có * khả năng nào * để cung cấp bản vá cho PrimeFaces không? Làm thế nào cứng là nó để sửa chữa? – Danijel

4

Đây là một ví dụ tầm thường khi sử dụng commandLink để chặn thứ gì đó. Sửa đổi các ví dụ giới thiệu từ here

<h:form> 
    <p:commandButton value="blockMe" id="someId" /> 
    <br /> 
    <p:commandLink id="pnlBtn" value="Block" type="button" 
     onclick="bui.show()" /> 
    <br /> 
    <p:commandLink id="pnlBtn2" value="Unblock" type="button" 
     onclick="bui.hide()" /> 

    <p:blockUI block="someId" widgetVar="bui" /> 
</h:form> 
+0

Tôi đã chỉnh sửa câu hỏi, vui lòng xem. – Danijel

+0

Đoán 'ai đó' khác nhanh hơn, nhưng tôi giữ câu trả lời khi BalusC tham khảo nó. :) Đối với bất cứ ai nắm bắt điều này trong tương lai, nó có thể đáng chú ý câu trả lời này phù hợp với câu hỏi ban đầu tốt hơn so với chỉnh sửa. –

0

Đối với những người như tránh khỏi thất bại như bản thân mình, nếu BlockUI là không kích hoạt, kiểm tra xem " trình kích hoạt "đã bật Ajax. Tôi đã dành gần một ngày cố gắng tìm ra lý do tại sao BlockUI không cháy và thấy rằng tôi đã có mục tiêu được cấu hình là 'ajax = "false"'.

0

Bạn có thể sử dụng bộ chọn jquery.

<p:commandLink styleClass="mybutton-class"> 
<p:blockUI ... trigger="@(.mybutton-class)">