排序后,它会删除错误的primefaces数据行

时间:2014-07-15 09:08:29

标签: sorting jsf primefaces datatable

我有一个primefaces数据表,其中包含一个包含commandButton的列,用于删除关联的行。当我对数据表进行排序并删除一行时,它会删除排序前该位置的行。

例如,假设我们在数据表中有5行:

line 1 with id=12
line 2 with id=10
line 3 with id=25
line 4 with id=36
line 5 with id=1

现在假设我按ID排序。我获得了这些专栏:

line 1 with id=1 (previously line 5)
line 2 with id=10 (previously line 2)
line 3 with id=12 (previously line 1) <---------------
line 4 with id=25 (previously line 3)
line 5 with id=36 (previously line 4)
到目前为止,它还没问题。

现在,如果我决定删除第3行,则会删除第1行,该行位于排序前第3行的位置

这是我的dataTable标签:

    <p:dataTable id="histoNotif" var="notif"
                    value="#{historiqueNotifController.listNotifications}"
                    paginator="true" rows="10"
                    paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                    rowsPerPageTemplate="5,10,20"
                    emptyMessage="No notifications"
                    rowStyleClass="#{notif.date==null ? 'new' : null}">
    ...
    </p:dataTable>

我希望我能清楚地解释这个问题。谢谢。


以下是删除方法的代码:

public void delete(Notif notif) {
        try {
            notifService.deleteNotif(notif);
            listNotifs.remove(notif);

        } catch (Exception e) {
            if (e instanceof DataIntegrityViolationException) {
                LOGGER.error(e.getStackTrace());
            }
        }  
    }

和按钮的代码:

<p:commandButton actionListener="#{notifController.delete(notif)}"
                        update=":formNotifs :formNotif"/>

1 个答案:

答案 0 :(得分:0)

最近遇到了这个问题,经过几个小时的尝试修复它最终我使用 javax.faces.view.ViewScoped 并切换到 javax.faces.bean.ViewScoped 以最终解决问题。