Как сослаться на p:commandLink в p:dataTable из триггера p:blockUI?
Это не работает для меня:
<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 для поиска идентификатора, я обнаружил, что у каждой строки свой идентификатор:
wfMgtForm:wfTable:0:editWatchfolderButtonId
wfMgtForm:wfTable:1:editWatchfolderButtonId
wfMgtForm:wfTable:2:editWatchfolderButtonId
wfMgtForm:wfTable:3:editWatchfolderButtonId
и т.п.
Как я должен ссылаться на эти автоматически созданные идентификаторы из моего <p:blockUI>
?
4 ответа
<p:dataTable>
также NamingContainer
, Включите его идентификатор, а также.
<p:blockUI ... trigger="wfTable:editWatchfolderButtonId">
Индекс строки присутствует только на стороне клиента, а не на стороне сервера, так что это не имеет значения.
Обновление: только что протестировано локально, оно действительно исправляет исключение, но оно вообще не вызывало пользовательский интерфейс блока (PrimeFaces 3.5). Похоже на ошибку в PrimeFaces.
В то же время, вам лучше всего вручную активировать его, как предлагает Аксель, но затем несколько другое:
<p:commandLink ... onclick="bui.show()" oncomplete="bui.hide()">
...
<p:blockUI widgetVar="bui" />
Вот тривиальный пример использования commandLink для блокировки чего-либо. Модифицированный пример витрины отсюда
<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>
Для таких же невежественных людей, как и я, если BlockUI не стреляет, проверьте, что для цели "триггер" включен Ajax. Я потратил почти день, пытаясь выяснить, почему BlockUI не сработал, и обнаружил, что моя цель настроена как 'ajax="false".
Вы можете использовать селектор jquery.
<p:commandLink styleClass="mybutton-class">
<p:blockUI ... trigger="@(.mybutton-class)">