我有一个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"/>
答案 0 :(得分:0)
最近遇到了这个问题,经过几个小时的尝试修复它最终我使用 javax.faces.view.ViewScoped 并切换到 javax.faces.bean.ViewScoped 以最终解决问题。