Как сослаться на 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:editWatchfolderButtonIdwfMgtForm:wfTable:1:editWatchfolderButtonIdwfMgtForm:wfTable:2:editWatchfolderButtonIdwfMgtForm: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)">
Другие вопросы по тегам