这对我不起作用:
<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>
我得到的错误是:
CCD_ 1。
当我使用Firebug查找ID时,我发现每一行都有一个不同的ID:
wfMgtForm:wfTable:0:editWatchfolderButtonId
wfMgtForm:wfTable:1:editWatchfolderButtonId
wfMgtForm:wfTable:2:editWatchfolderButtonId
wfMgtForm:wfTable:3:editWatchfolderButtonId
等
我应该如何引用<p:blockUI>
中自动创建的ID?
<p:dataTable>
也是NamingContainer
。还包括其ID。
<p:blockUI ... trigger="wfTable:editWatchfolderButtonId">
行索引只存在于客户端,而不存在于服务器端,因此这并不相关。
Update:只是在本地测试了它,它确实修复了异常,但它根本没有触发块UI(PrimeFaces3.5)。看起来像PrimeFaces中的一个bug。
与此同时,你最好的选择是按照阿克塞尔的建议手动触发它,但有些不同:
<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)">