我有一个datagrid组件:
<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,该方法从列表中删除了支持网格的项目。 数据网格甚至刷新(我可以看到显示的列数减少了一个),但不是网格元素内的值。
在代码中,我专心写了???因为我尝试了几十个选项,包括:
dg
,:myForm:dg
等@form
,:myForm
,:myForm:statementDataContent
等。p:remoteCommand
或p:collector
* 我的bean在SessionScope中(无法更改)。
帮助理解我的问题:想象一下这个起始状态:
我在datagrid中有三个项目。现在我按下最左边(第一个)项目的删除按钮。日志告诉正确的元素从支持集合中删除:
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]]
此外,以下屏幕截图显示了之后的结果:
如您所见,网格现在检测到只显示两个项目,但显示的是前两个项目。
请给我一些提示,因为我用完了。 : - (
提前致谢!
巴拉热
答案 0 :(得分:0)
PrimeFaces提供的p:commandButton
默认使用AJAX,所以你应该设置process="@none"
而不是设置immediate
标志
(Example in PrimeFaces showcase)。
在p:commandButton
内使用p:dataTable
也无法正常工作,但在版本3.4中已修复(如果我没记错的话)。这也适用于p:dataGrid
。