Jsf 避免在托管bean中重复一段样板代码重置页面边界(p:dataTable)

Jsf 避免在托管bean中重复一段样板代码重置页面边界(p:dataTable),jsf,primefaces,datatable,lazydatamodel,Jsf,Primefaces,Datatable,Lazydatamodel,从迭代组件(如)中删除行时,如果最后一页中的所有行都已删除,则需要将当前页重置为上一页。不幸的是,这在和LazyDataModel中不是自动的 从语言上讲,如果一个数据表包含11页,每页10行,并且第11页(即最后一页)上的所有行都被删除,它应该自动获得第10页(即前一页),但这不会自动发生(当前页保持静止(第11页),就好像数据表本身被清空一样)除非在相关的支持bean中的某处显式编码 非正式地说,对应的伪代码段如下所示 if (rowCount <= (ceiling)((first

从迭代组件(如
)中删除行时,如果最后一页中的所有行都已删除,则需要将当前页重置为上一页。不幸的是,这在
LazyDataModel
中不是自动的

从语言上讲,如果一个数据表包含11页,每页10行,并且第11页(即最后一页)上的所有行都被删除,它应该自动获得第10页(即前一页),但这不会自动发生(当前页保持静止(第11页),就好像数据表本身被清空一样)除非在相关的支持bean中的某处显式编码

非正式地说,对应的伪代码段如下所示

if (rowCount <= (ceiling)((first + 1) / pageSize) * pageSize - pageSize) {
    first -= pageSize;
}
静态实用程序方法
utility#currentPage()
的定义如下

public static int currentPage(int first, int pageSize) {
    return first <= 0 || pageSize <= 0 ? 1 : new BigDecimal(first + 1).divide(new BigDecimal(pageSize), 0, BigDecimal.ROUND_CEILING).intValue();
}
publicstaticintcurrentpage(intfirst,intpagesize){

return第一个最好的方法是要求PF人员为此修复分页器逻辑。目前将其放入基类中?在整个项目中,使用
LazyDataModel
在每个托管bean中都重复了这段代码。因此,将其移动到超类需要对当前的设计进行重大更改-difF无法采纳。@NassimMoualek:请证实。例如,创建一篇博客文章,详细阐述所有细节。PF datatable对我们来说很好,具有良好的专业性performance@Tiny:那么我想你是不知所措了。除了可能重写PF类之外。没有人能为你写一个有效的答案
public static int currentPage(int first, int pageSize) {
    return first <= 0 || pageSize <= 0 ? 1 : new BigDecimal(first + 1).divide(new BigDecimal(pageSize), 0, BigDecimal.ROUND_CEILING).intValue();
}