一般在前台排序只需要在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"}]
所以,在后台接收的时候,需将其转换为实体类,获取其中的排序信息。
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;
}
}
//可能是多个排序字段
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();
}
排序到此结束!