3

我有一个数据网格组件:

<h:form id="myForm">
    <h:panelGroup id="statementDataContent" layout="block">

[... some controlls ...]

    <p:dataGrid id="dg" columns="#{statementDataRequestAction.columnCount}"  var="statement"
       value="#{statementDataRequestAction.data}"  rowIndexVar="#{statement.id}" >
          <p:column>
         <p:panelGrid columns="1" >
                 
              [... some controlls ...]
              <p:commandButton value="-" immediate="true" type="submit" actionListener="#{statementDataRequestAction.remove(statement)}"  process="@form" update="??? " />
                              
         </p:panelGrid>
          </p:column>
    </p:dataGrid>

如您所见,有一个按钮可以删除当前项目。它正确调用 bean,并且该方法从列表中删除支持网格的项目。数据网格甚至刷新(我可以看到显示的列数减少了 1),但不是网格元素内的值。

在代码中,我特意写了??? 因为我尝试了几十个选项,包括:

  • 刷新网格:dg, :myForm:dg, 等
  • 刷新整个表单:@form:myForm:myForm:statementDataContent等。
  • 刷新内部的字段,但很难解决它们
  • 甚至一些奇特的东西,比如使用p:remoteCommandor p:collector*

我的 bean 在 SessionScope 中(无法更改)。

并帮助理解我的问题:想象一下这个起始状态:

删除前

我在数据网格中有三个项目。现在我按下最左边(第一个)项目的删除按钮。日志告诉我们从支持集合中删除了正确的元素:

Remove statement: 4 - StatementDataWrapper [id=4, data=Entity: 16 - hu.avhga.entities.StatementData, year=1000]
===============Removed: true :
[StatementDataWrapper [id=5, data=Entity: 17 - hu.avhga.entities.StatementData, year=1010], StatementDataWrapper [id=6, data=Entity: 18 - hu.avhga.entities.StatementData, year=1020]]

此外,以下屏幕截图显示了之后的结果:

在此处输入图像描述

如您所见,网格现在检测到只有两个项目要显示,但显示的两个是前两个。

请给我一些提示,因为我用完了它们。:-(

提前致谢!

巴拉格

4

1 回答 1

0

PrimeFaces 提供的p:commandButton默认使用 AJAX,因此您应该设置process="@none"而不是设置immediate标志(PrimeFaces 展示中的示例)。

使用p:commandButtoninsidep:dataTable也不能正常工作,但在 3.4 版中已修复(如果我没记错的话)。这也适用于p:dataGrid.

于 2013-05-10T10:09:55.577 回答