0

我有以下配置: JSF: Apache MyFaces JSF-2.1 Core API (Version: 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 按钮的更新属性才能刷新 exp_panel,但是当我将其设置为 update=":growl :expanel" 时出现错误:

找不到从“mainForm:vmt:0:refreshRowExpPanel”引用的标识符为“:expanel”的组件。

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

找不到从“mainForm:vmt:0:refreshRowExpPanel”引用的标识符为“:mainForm:vmt:0:refreshRowExpPanel”的组件。

使用 update=":mainForm" 它可以工作,但是它会刷新整个 dataTable 并且我的扩展行将被关闭,所以它不好。

您能否提出一个解决方案,如何仅刷新 rowExp 中的面板,可能来自 JS,或者任何其他想法?

谢谢!

4

2 回答 2

0

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

update="mainForm:vmt:0:refreshRowExpPanel"

您也可能想阅读这篇关于制作参考的文章。

于 2013-08-11T11:40:31.927 回答
0

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

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

通过删除外部形式,并将更新值更改为“@form”解决了问题

于 2013-08-12T08:26:01.610 回答