Sorting Grails标准排序和分页
我正在尝试这样的事情:Sorting Grails标准排序和分页,sorting,grails,pagination,gorm,criteria,Sorting,Grails,Pagination,Gorm,Criteria,我正在尝试这样的事情: def pagingParams = SortingAndPagingUtils.preparePaging(params) def Objs = Obj.createCriteria().list(pagingParams) { baseCriteria(params, delegate) } 我的pagingParams看起来像: [max: pageSize, offset: offset] 我的baseCrit
def pagingParams = SortingAndPagingUtils.preparePaging(params)
def Objs = Obj.createCriteria().list(pagingParams) {
baseCriteria(params, delegate)
}
我的pagingParams看起来像:
[max: pageSize, offset: offset]
我的baseCriteria
创建了一个如下的订单:
[['field','ASC]]
假设我的页面大小是10。我首先获取10个结果-它们确实按字段进行了正常排序。我又拿了10张(第二页)。就其本身而言,第二页结果的排序很好,但是,它们不是基于第一页结果进行排序的
简单的例子:
第一页:[10,9,9,8,7,6,5,4,3]
第二页:[9,5,4,3,2,1,0…]
我怎样才能解决这个问题?这是正常的还是我遗漏了什么
以后编辑:
我观察到,如果我增加页面大小,那么我不会得到如此未排序的结果(有点明显,但值得一提)
以后再编辑:
我很抱歉没有早点说清楚。下面是baseCriteria
方法的外观:
private def baseCriteria(params, builder) {
def sortOrderPairs = SortingAndPagingUtils.prepareSorting(params)
def result = {
sortOrderPairs.each {
order((it[0] as String), (it[1] as String))
}
}
result.delegate = builder
result()
}
其中sortOrderPairs
看起来像
[['field','ASC]]
据我所知,这
sortOrderPairs.each {
order((it[0] as String), (it[1] as String))
}
我应该做这件事,对吗?但事实并非如此
即使是最晚的编辑
我试着简化每件事,只做一件事
def tasks = Obj.createCriteria().list(max: pageSize, offset: pageSize * (currentPage - 1)) {
order('field', 'DESC')
}
但问题依然存在
甚至试过
def tasks = Task.createCriteria().list(max: pageSize, offset: pageSize * (currentPage - 1), sort: 'field', order: 'DESC');
同样的问题baseCriteria返回一个列表,而记录实际上从未被排序过,因为没有指定顺序,在您看来是顺序的记录实际上是随机的,也可能只是显示而已。要测试这个替换
baseCriteria(params, delegate)
用一些枯燥的代码。比如说,
order("name","asc")
在这里,名称是硬编码的干运行。下面是干标准的例子,它工作得很好,订单并没有受到干扰。试一试
def Objs = Group.createCriteria().list([max:10,offset:0]) {
order("name","asc")
}
然后
def Objs = Group.createCriteria().list([max:10,offset:10]) {
order("name","asc")
}
以此类推,观察输出。如果可行,请更正方法调用以设置正确的参数、顺序字段和顺序。什么是排序和分页?我还没有在上面找到任何东西?它只是我创建的一个实用程序类,仅此而已