id(“myButtonId2”)的Commandbutton工作正常。我的意思是它更新了“myOutputPanel”,但是在datatable内部的commandbutton不会更新outputPanel。是否有针对数据表的特定更新样式?
<h:form id="myForm" prependId="false">
<p:panel id="myPanel">
<p:dataTable id="myDatatable">
<p:column style="width:4%">
<p:commandButton id="myButtonId" update="myOutputPanel"/>
</p:column>
</p:dataTable>
<p:commandButton id="myButtonId2" update="myOutputPanel"/>
</p:panel>
<p:outputPanel id="myOutputPanel">
//some stuff
</p:outputPanel>
答案 0 :(得分:1)
这是因为process
和update
的工作方式与f:ajax
组件属性execute
和render
的工作方式大致相同。如果组件位于同一NamingContainer
内,则只能直接引用组件的ID。
clientID是通过为:
分隔的命名容器ID添加前缀来生成的。尽管p:panel
和NamingContainer
确实h:form
,但p:dataTable
组件仍未实施NamingContainer
。
myOutputPanel
的clientID如下:
myForm:myOutputPanel
第二个按钮有效,因为它位于dataTable之外,并且相对于同一个NamingContainer中的myOutputPanel
。要在process
或update
中引用绝对clientID,可以在clientID前加:
符号。
尝试将第一个commandButton的update
属性更改为:
:myForm:myOutputPanel
这应该允许它绝对引用它生成的clientID并工作。