1

带有 id("myButtonId2") 的命令按钮可以正常工作。我的意思是它会更新“myOutputPanel”,但数据表内的命令按钮不会更新 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>
4

1 回答 1

1

这是因为 withprocessupdate它们的工作方式与f:ajax组件属性executerenderdo 的工作方式非常相似。如果它们位于同一 . 中,则只能直接引用组件的 id NamingContainer

:clientID 是通过在默认情况下分隔的命名容器 id 前缀来生成的。该p:panel组件虽然没有实现,NamingContainer但确实实现了。h:formp:dataTableNamingContainer

的clientIDmyOutputPanel如下:

myForm:myOutputPanel

第二个按钮有效,因为它在 dataTable 之外并且相对于myOutputPanel作为表单的同一个 NamingContainer 中。要引用绝对客户端 ID,process或者update可以在客户端 ID 前加上:符号。

尝试将update第一个 commandButton 的属性更改为:

:myForm:myOutputPanel

这应该允许它绝对引用其生成的 clientID 和工作。

于 2013-05-03T12:19:47.843 回答