【问题标题】:JSF/Primefaces data table f:setPropertyActionListener setting previous row's propertyJSF/Primefaces 数据表 f:setPropertyActionListener 设置上一行的属性
【发布时间】:2012-09-10 18:47:29
【问题描述】:

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

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

【问题讨论】:

    标签: jsf datatable primefaces


    【解决方案1】:

    因为你使用的是 3.4 之前的 pf 版本或者你没有使用 3.3filteredValue 中新引入的属性

    引入此新功能的原因是以下打开的问题 DataTable filtering problem and ActionSource Components

    看看showcase(使用的是3.4)

    DataTable - Filtering

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


    编辑

    看完你的评论

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

    我有以下话要说:

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

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

    3.4 datatables execute of table affects filteredValue only?

    也可以在那里发布依赖:)

    【讨论】:

    • @Daniel- 感谢您的回复。但升级到 pf 3.4 有部分帮助。删除了正确的行,但删除后数据表不刷新。如果您注意到我正在更新数据表作为删除确认的一部分。想法?
    • 是的,它的原因可能是您没有从 filteredValue 属性引用的列表中删除它...(如果另一个列表不为空,请从另一个列表中删除该行),奇怪的解决方案?我也这么觉得……
    • 你解释后才有意义。但我同意你的观点,它应该始终从值而不是过滤值中获取,因为我要返回数据库来刷新我的数据表,而这并没有发生。
    • 它导致您也必须重新加载附加到filteredValue 的列表
    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2013-06-21
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多