Primefaces:在p:rowExpansion中更新(刷新)p:面板

时间:2013-08-09 12:08:36

标签: ajax primefaces datatable

我有以下配置: JSF:Apache MyFaces JSF-2.1核心API(版本:2.1.10) PrimeFaces 3.4.2 Tomcat 7.0.35

我有一个带有rowExpansion的DataTable和一个带有rowExpansion按钮的面板。当用户点击按钮时,我想只刷新rowExpansion中的面板。

<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
        <p:ajax event="rowToggle" listener="#{myViewBean.onRowToggle}" update=":growl" /> 
     <p:column style="width:2%"><p:rowToggler /></p:column>
     <p:column>...</p:column>
        <p:rowExpansion>
         <p:panel id="exp_panel" header="#{vmtemplate.name} Instances">
      <h:form id="instancesForm">
                                <p:commandButton id="refreshRowExpPanel" title="Refresh" update=":growl" action="#{myViewBean.reloadData}"/> 
          </h:form>                                 
          </p:panel>
     </p:rowExpansion>
</p:dataTable>

我想我必须设置refreshRowExpPanel按钮的update属性才能刷新exp_panel,但是当我将它设置为update =“:growl:expanel”时,我收到一个错误:

  

找不到引用标识符“:expanel”的组件   “的MainForm:VMT:0:refreshRowExpPanel”。

所以生成的面板ID是“mainForm:vmt:0:refreshRowExpPanel”,但是当我将此指定给更新时(update =“:mainForm:vmt:0:refreshRowExpPanel”),我得到了同样的错误:< / p>

  

无法找到带标识符的组件   “:mainForm:vmt:0:refreshRowExpPanel”引用自   “的MainForm:VMT:0:refreshRowExpPanel”。

使用update =“:mainForm”它可以工作,但它会刷新整个dataTable,我的扩展行将被关闭,所以它没有问题。

你能否建议一个解决方案,如何只刷新rowExp中的面板,可能是JS,还是其他任何想法?

THX!

2 个答案:

答案 0 :(得分:0)

我建议您尝试在开头使用不带冒号的面板ID,所以:

update="mainForm:vmt:0:refreshRowExpPanel"

此外,您可能希望阅读有关making references

的帖子

答案 1 :(得分:0)

我刚刚意识到,我的数据表之外有一个表单:

<h:form id="outerForm">
<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
pansion>
...
</p:dataTable>
</form>

删除外部表单,并将更新值更改为“@form”解决了问题