我有一个数据网格组件:
<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:remoteCommand
orp: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]]
此外,以下屏幕截图显示了之后的结果:
如您所见,网格现在检测到只有两个项目要显示,但显示的两个是前两个。
请给我一些提示,因为我用完了它们。:-(
提前致谢!
巴拉格