2013-05-03 24 views
1

带有id(“myButtonId2”)的Commandbutton可以正常工作。我的意思是它更新“myOutputPanel”,但是在datatable中的commandbutton不会更新outputPanel。 datatables有特定的更新风格吗?如何从数据表中更新面板

<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

这是因为processupdate他们的工作几乎相同的方式作为f:ajax组件属性executerender做。如果它们位于相同的NamingContainer内,则只能直接引用组件的ID。

默认情况下,clientID是通过为命名容器ID前缀:生成的。该p:panel组件没有实现NamingContainer虽然h:formp:dataTable也实现NamingContainer

myOutputPanel ClientID的如下:

myForm:myOutputPanel 

第二按钮工作,因为它是外DataTable的,并且相对于myOutputPanel在同一NamingContainer其形式。要引用processupdate中的绝对clientID,可以在clientID前加上:符号。

尝试改变第一个CommandButton的update属性:

:myForm:myOutputPanel 

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

+0

我收到此错误。 “无法找到标识符为”myView:myDatatable:0:myButtonId“”的myForm:myOutputPanel“引用。顺便说一下,这个页面是在一个标签内,而tabview的ID是“tabView”。 – 2013-05-03 12:28:49

+0

我也试过“tabView:myOutputPanel”和“:tabView:myOutputPanel”和“:myOutputPanel”。他们都没有工作。 – 2013-05-03 12:35:12

+0

@TurgutDsfadfa TabView的也是NamingContainer但它是建立在一个'UI:repeat'所以您不能直接访问的绝对clientID的这一点。你要么需要更新整个TabView的,或者你可以使用'@ form'保留值更新'myForm'内的所有元素。 – 2013-05-03 12:39:23