首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使反网格分页器与弹簧控制器进行排序

如何使反网格分页器与弹簧控制器进行排序
EN

Stack Overflow用户
提问于 2015-03-03 06:30:09
回答 1查看 352关注 0票数 1

我们使用的是backbone.paginator;backgrid;backgrid-filter ;backgrid-paginator它工作得很好,我们尝试排序时遇到了一些小问题--在server side mode -the网格中按一个(或多个)列排序。

对于服务器端are使用Springorg.springframework.data.web.PageableHandlerMethodArgumentResolver

在调试应用程序时,来自客户端的order似乎在春季端没有得到很好的解析,它落在了default value上。

两个问题:

  1. 有没有人知道应该发送给PageableHandlerMethodArgumentResolver的参数是什么?
  2. 如何才能对Backbone.PageableCollection进行调整以实现这一目标?

我们的初始化分页器代码

代码语言:javascript
复制
   Backbone.PageableCollection.extend({
            state : {
                pageSize : 15,
                firstPage : 0, /* Spring paging is 0-based */
            },

            mode : "server",
        
            /**
             * override default queryParams to fit spring pageable var names
             */
            queryParams : {
                    pageSize:"size",
                    totalRecords:"totalElements",
                    sortKey:"sort",
                    order:"sort_order",
                    directions  : { "-1": "asc", "1": "desc" }
            },
  })

P.S:

看来,spring期望将data作为由comma分隔的数组,而不是常规的。知道怎么用backbone.paginator吗?或者如何更改spring,使其能够解析分页器以支持多个sorting parameters

EN

回答 1

Stack Overflow用户

发布于 2015-03-03 08:26:26

在对Spring源代码PageableHandlerMethodArgumentResolverSortHandlerMethodArgumentResolver.java (可以找到这里)做了一些研究之后,看来Spring排序参数的格式为

代码语言:javascript
复制
sort="column1,column2,column3...,order"&sort="column4,column5,...,order"

backbone.paginator似乎不支持多重排序,但是为了使paginator支持具有信号排序的SortHandlerMethodArgumentResolver,可以重写sync函数来设置vars。

示例

代码语言:javascript
复制
var sync = Backbone.PageableCollection.prototype.sync;

Backbone.PageableCollection.prototype.sync = function(method, model,
        options) {
    options.type = 'POST' // this help with unicode on tomcat and can be removed..

    /**
     * @override sync Add some code to support parsing of sorting parameters
     *           by SortHandlerMethodArgumentResolver
     */
    if (!options.data) {
        sync.apply(this, arguments)
    }

    var sortKey = _.result(this.queryParams,"sortKey");

    if (!sortKey in options.data) {
        sync.apply(this, arguments)
    }

    options.data[STR_SPRING_SORT] = options.data[sortKey]
    var orderKey = _.result(this.queryParams,"order");

    var STR_SPRING_SORT = "sort";
    var STR_SEPERATOR = ",";

    if (orderKey  in options.data) {
        options.data[STR_SPRING_SORT] = options.data[STR_SPRING_SORT] + STR_SEPERATOR
                + options.data[orderKey]
        if (sortKey !== STR_SPRING_SORT) {
            delete options.data[sortKey];
        }

        delete options.data["order"];
    }

    sync.apply(this, arguments);

};

备注

可以强制spring更改commasort字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28825455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档