ExtJS6.0之后台排序

一般在前台排序只需要在Grid的列里加上一个属性即可:

columns: [
    new Ext.grid.RowNumberer({width:50}),
    {
        header: '工号',
        width: 120,
        sortable: true,//表明该列可以前台排序,即当前页面的排序
        dataIndex: 'empId',
        align: 'center'
    },
]

如果要后台排序,需要在创建数据源的时候添加如下代码:

var extField = ["empId", "ename", "creditCard", "telephone", "workName", "projectNameDesc", "workStatus", "deptName", "workStatusDesc"];
store = Ext.create('Ext.data.Store', {
    pageSize: limit,
    fields: extField,
    proxy: {
        type: 'ajax',
        url: basePath + 'trialEmployee/trial-employee!getTrialEmpListByDeptExt',
        reader: {
            type: 'json',
            root: 'root',
            totalProperty: 'count'
        }
    },
    //***********************后台排序**********//
    //*********具体后台如何接收参数,看下面讲解**//
    remoteSort: true,  
    /*sortInfo: {//ext4 之前
        field: 'empId',
        direction: 'ASC'
    }*/
    sorters:[//ext6.0排序方式,可以传多个字段,以{},{}分割
        {
            property :'empId',
            direction:'DESC'
        }
    ],
    //******************************************//
});

后台接收方式

在http请求中,排序是这样传到后台的:

sort:[{"property":"empId","direction":"DESC"}]

所以,在后台接收的时候,需将其转换为实体类,获取其中的排序信息。

  • 新增Sort排序实体类,接收sorters中的字段proerty(排序字段)和direction(排序方式)
package com.juttec.account.entity;

/**
 * 
 * 排序实体类
 * 
 * 
 * 接收前台传过来的排序相关参数
 * 
* * @author 李晓东 * * 2017.03.23 * * @since 1.0 * */
public class Sort { private String property; private String direction; public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public String getDirection() { return direction; } public void setDirection(String direction) { this.direction = direction; } }
  • 在请求的action中,接收参数,将其转换,使用google的开源工具Gson包
//可能是多个排序字段
List<Sort> sortEntity = gson.fromJson(getRequestPara("sort"), new TypeToken<List<Sort>>(){}.getType());
String sort = sortEntity.get(0).getProperty();//排序的列名
String dir = sortEntity.get(0).getDirection();//排序方式
//前台传过来的是实体类映射的字段,sql查询需将其转换为数据库字段
if ("empId".equals(sort)) {
    sort = "emp_id";
}

如果字段在数据库创建的时候是下划线命名方式(下划线命名法),使用eclipse自带的工具,生成的字段是小驼峰命名的(驼峰命名法)。即emp_id对应empId,这个时候可以使用封装的工具类进行转换。

/**
 * 将字段从小驼峰转换为下划线方式
 */
public static String camelToUnderline(String param) {
    if ((param == null) || ("".equals(param.trim()))) {
        return "";
    }
    int len = param.length();
    StringBuilder sb = new StringBuilder(len);
    for (int i = 0; i < len; ++i) {
        char c = param.charAt(i);
        if (Character.isUpperCase(c)) {
            sb.append('_');
            sb.append(Character.toLowerCase(c));
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

排序到此结束!

你可能感兴趣的:(ExtJs,前端框架)