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

时间:2013-02-15 11:30:40

标签: jsf jsf-2 primefaces 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查找ID时,我发现每一行都有不同的ID:

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

如何从我的<p:blockUI>

中引用此自动创建的ID

4 个答案:

答案 0 :(得分:10)

<p:dataTable>也是NamingContainer。也包括其ID。

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

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


更新:刚刚在本地进行了测试,它确实修复了异常,但它根本没有触发阻止UI(PrimeFaces 3.5)。看起来像PrimeFaces中的一个错误。

同时,你最好的选择是按照Aksel的建议手动触发它,但后来有所不同:

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

答案 1 :(得分: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>

答案 2 :(得分:0)

对于那些像我一样无能为力的人,如果BlockUI没有被触发,请检查&#34;触发&#34; target已启用Ajax。我花了将近一天的时间试图弄清楚为什么BlockUI没有开火,并发现我的目标配置为&#39; ajax =&#34; false&#34;&#39;。

答案 3 :(得分:0)

您可以使用jquery选择器。

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