如何从数据表更新面板

时间:2013-05-03 12:04:44

标签: jsf primefaces xhtml

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>

1 个答案:

答案 0 :(得分:1)

这是因为processupdate的工作方式与f:ajax组件属性executerender的工作方式大致相同。如果组件位于同一NamingContainer内,则只能直接引用组件的ID。

clientID是通过为:分隔的命名容器ID添加前缀来生成的。尽管p:panelNamingContainer确实h:form,但p:dataTable组件仍未实施NamingContainer

myOutputPanel的clientID如下:

myForm:myOutputPanel

第二个按钮有效,因为它位于dataTable之外,并且相对于同一个NamingContainer中的myOutputPanel。要在processupdate中引用绝对clientID,可以在clientID前加:符号。

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

:myForm:myOutputPanel

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