1

我正在使用 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 范围。

关于为什么会发生这种情况的任何想法?这似乎是数据表应该支持的基本事情,所以我假设我在这里做错了。谢谢你的帮助

4

1 回答 1

3

它的原因是您使用的是 3.4 之前的 pf 版本,或者您没有使用 3.3 中新引入的filteredValue属性

引入此新功能的原因是以下打开的问题 DataTable 过滤问题和 ActionSource 组件

看一下陈列柜(即使用3.4)

数据表 - 过滤

DataTable 过滤需要在后备 bean 中引用过滤值,如果未定义此引用,则为了向后兼容,过滤将使用视图状态工作,但这是一个后备,将在未来的版本中删除。


编辑

看完你的评论

@Daniel-感谢您的回复。但是升级到 pf 3.4 有部分帮助。删除了正确的行,但删除后数据表不刷新。如果您注意到我正在更新数据表作为删除确认的一部分。想法?

我有以下要说的:

是的,它的原因可能是您没有从被过滤值属性引用的列表中删除它...(从另一个列表中删除该行,以防另一个列表不为空),奇怪的解决方案?我也这么认为...虽然我可以理解在我们处于过滤模式之后执行过滤列表的想法背后的逻辑...但是仍然...

看看我几天前发布的以下论坛帖子

3.4 表的datatables执行只影响filteredValue?

也可以随意在那里发布一个依赖:)

于 2012-09-10T19:06:44.717 回答