我正在使用primefaces和JSF 2.0。我有一个带有删除列的数据表,如下所示。
<p:column id="Delete" headerText="Delete">
<p:commandButton icon="delete" onclick="deleteConfirmation.show()" style="align:center">
<f:setPropertyActionListener value="#{item}" target="#{controller.selectedItem}" /> </p:commandButton>
</p:column>
//删除确认对话框
<p:confirmDialog id="deleteConfirmDialog" message="Are you sure you want to delete?"
header="Delete" severity="alert"
widgetVar="deleteConfirmation">
<p:commandButton id="confirm" value="Yes"
update=":myList" oncomplete="deleteConfirmation.hide()"
actionListener="#{controller.delete}" />
<p:commandButton id="cancel" value="No"
onclick="deleteConfirmation.hide()" type="button" />
</p:confirmDialog>
一切都很好,除非我在数据表上进行过滤。在我过滤并单击删除后,selectedItem方法获取数据表中的上一行(不是过滤结果的一部分)而不是当前行。
如果没有过滤,则不存在此问题。 我正在为我的控制器使用ViewScoped范围。
有关为何发生这种情况的任何想法?这似乎是一个应该由数据表支持的基本内容,所以我假设我在这里做错了。谢谢你的帮助
答案 0 :(得分:3)
其原因是您使用3.4之前的pf版本,或者您没有使用3.3 filteredValue
属性中新引入的
引入了以下已打开问题的原因 DataTable filtering problem and ActionSource Components
看一下展示(即使用3.4)
DataTable过滤需要在backing bean中使用filteredValue引用,为了向后兼容,如果未定义此引用,则过滤将使用视图状态,但这是一个后备,将在以后的版本中删除。
修改强>
阅读评论后
@ Daniel-感谢您的回复。但升级到pf 3.4有部分帮助。删除正确的行,但删除后数据表不会刷新。如果您注意到我正在更新数据表作为删除确认的一部分。想法?
我得到以下内容:
是的,原因你可能没有从filterValue属性引用的列表中删除它...(如果另一个列表不为null,则从其他列表中删除行),奇怪的解决方案?我也这么认为...... 虽然我可以理解在我们处于过滤模式后执行过滤列表的想法背后的逻辑......但仍然......
看看我几天前发布的以下论坛帖子
3.4 datatables execute of table affects filteredValue only?
随意发布依赖:)