2013-02-15 5 views
7

Это не работает для меня:Как ссылаться на p: commandLink в p: dataTable из 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> 

ошибка, что я получаю:

Cannot find component with identifier "editWatchfolderButtonId".

Когда я использовал Firebug искать ID, я обнаружил, что каждая строка имеет различные ID:

wfMgtForm:wfTable:0:editWatchfolderButtonId wfMgtForm:wfTable:1:editWatchfolderButtonId wfMgtForm:wfTable:2:editWatchfolderButtonId wfMgtForm:wfTable:3:editWatchfolderButtonId
т.д.

Как я должен ссылаться на этот автомобиль создан ID из моего <p:blockUI>?

ответ

10

<p:dataTable> также NamingContainer. Включите его идентификатор.

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

Индекс строки присутствует только на стороне клиента, а не на стороне сервера, поэтому это не имеет значения.


Update: просто проверял его на месте, он действительно фиксирует исключение, но это не вызовет блок пользовательского интерфейса на всех (PrimeFaces 3.5). Похоже на ошибку в PrimeFaces.

В то же время, лучше всего, чтобы вручную запустить его, как было предложено Акселя, но несколько иначе:

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

ошибка? ohhh не снова ... – Danijel

+0

Для меня тоже в версии 3.4.1, больше не существует никаких исключений, но я еще не заблокировал UI. – Danijel

+0

Это полностью снижает пользовательский интерфейс для моего пользовательского интерфейса. Есть ли * любая возможность предоставить патч для PrimeFaces? Как трудно это исправить? – Danijel

4

Вот тривиальный пример использования commandLink для блокировки чего-либо. Модифицированный витрина пример из 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

Я отредактировал вопрос, пожалуйста, посмотрите. – Danijel

+0

Угадайте, что кто-то еще быстрее, но я держу ответ, так как BalusC ссылается на него. :) Для тех, кто будет использовать это в будущем, может быть, стоит отметить, что этот ответ соответствует оригинальному вопросу лучше, чем отредактированный. –

0

Для тех, кто, как невежественный, как и я, если BlockUI не стреляя, убедитесь, что " триггер "имеет Ajax включен. Я потратил почти целый день, пытаясь понять, почему BlockUI не срабатывал и обнаружил, что у меня настроена его цель как «ajax =« false ».

0

Вы можете использовать селектор jquery.

<p:commandLink styleClass="mybutton-class"> 
<p:blockUI ... trigger="@(.mybutton-class)"> 
Смежные вопросы