Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Grails标准排序和分页_Sorting_Grails_Pagination_Gorm_Criteria - Fatal编程技术网

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")
 }

以此类推,观察输出。如果可行,请更正方法调用以设置正确的参数、顺序字段和顺序。

什么是排序和分页?我还没有在上面找到任何东西?它只是我创建的一个实用程序类,仅此而已