如何从p:blockUI触发器中引用p:dataTable中的p:commandLink?

7

这对我没有用:

<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>

我遇到的错误是:
找不到标识符为“editWatchfolderButtonId”的组件。
当我使用Firebug查找ID时,我发现每一行都有一个不同的ID:
wfMgtForm:wfTable:0:editWatchfolderButtonId wfMgtForm:wfTable:1:editWatchfolderButtonId wfMgtForm:wfTable:2:editWatchfolderButtonId wfMgtForm:wfTable:3:editWatchfolderButtonId等。
我应该如何从我的中引用这些自动生成的ID?
4个回答

10

<p:dataTable>也是一个NamingContainer。请同时包括它的ID。

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

行索引只存在于客户端,而不在服务器端,因此它并不相关。


更新:我在本地进行了测试,它确实修复了异常,但根本没有触发块UI(PrimeFaces 3.5)。看起来是PrimeFaces的一个bug。

同时,您最好像Aksel建议的那样手动触发它,但稍有不同:

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

对于我来说,在版本3.4.1中,不再有任何异常,但仍然没有UI被阻塞。 - Danijel
这完全降低了我的UI用户体验。有没有任何可能为PrimeFaces提供补丁?修复难度大吗? - Danijel
这里也有同样的问题,PF6。 - Tim

4

这是一个使用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>

猜测“某人”更快,但我将保留BalusC的答案作为参考。 :) 对于未来看到此内容的任何人,值得注意的是,此答案比编辑后的问题更符合原始问题。 - Aksel Willgert

0
你可以使用 jQuery 选择器。
<p:commandLink styleClass="mybutton-class">
<p:blockUI ... trigger="@(.mybutton-class)">

0
对于像我一样毫无头绪的人,如果BlockUI没有触发,请检查“触发器”目标是否启用了Ajax。我花了将近一天的时间试图弄清楚为什么BlockUI没有触发,最后发现我的目标配置为'ajax="false"'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接