easyui datagrid实现分页
1、前台实现分页:这种方式在easyui 提供的demo中存在,粘贴复制过来如下:
在用到的位置加上:$("#datagrid").datagrid({ loadFilter : pagerFilter}).datagrid("loadData", data.rows);
比如说我用到的位置是查询结果返回后,那么我的是:
function queryMenu() {
$.post("../servlet/menu/select", {
menuname : $("#name").val()
}, function(data, states) {
$("#menudatagrid").datagrid({ loadFilter : pagerFilter}).datagrid("loadData", data.rows);
}, "json");
}
然后增加方法:
function pagerFilter(data) {
if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array
data = {
total : data.length,
rows : data
}
}
var dg = $(this);
var opts = dg.datagrid('options');
var pager = dg.datagrid('getPager');
pager.pagination({
onSelectPage : function(pageNum, pageSize) {
opts.pageNumber = pageNum;
opts.pageSize = pageSize;
pager.pagination('refresh', {
pageNumber : pageNum,
pageSize : pageSize
});
dg.datagrid('loadData', data);
}
});
if (!data.originalRows) {
data.originalRows = (data.rows);
}
var start = (opts.pageNumber - 1) * parseInt(opts.pageSize);
var end = start + parseInt(opts.pageSize);
data.rows = (data.originalRows.slice(start, end));
return data;
}
2、后台前台综合实现分页,首先前台定义好表格每页显示的行数:默认为10,我选用的是默认10.
我要实现的目标是在初始化该表格的时候就实现数据分页显示。
其实对于easyui来说,分页时页面需要设置pagination:true,这样,在表格下方将显示分页工具栏。分页工具栏就会主动向服务器发送二个参数:
1、page: 页号,从1计起。
2、rows: 每页记录大小。
然后你使用其他架构如果可以直接再后台接受这两个参数的话,那么处理起来就方便的多了。比如说像servlet这种的,可以直接request接收。
但是我碰到的不是这种情况,我用的是reslet,因为以前没有用过,不知道有没有其他情况可以实现上述可以直接接收。但是我试过我能用到的接收参数的方法都不行,首先page和rows是前台默认传入后台的,不需要你在前台设置参数,你只需要在后台接收即可,但是reslet不能正常接收这种默认传的参数。
所以我采用了前台后台结合的方式,首先让前台显示传送这两个参数:
$(function() {
var grid = $('#menudatagrid');
var options = grid.datagrid('getPager').data("pagination").options;
var curr = options.pageNumber;//页数,当前页是第几页
var total = options.pageSize;//每页显示的行数,我这里是10
$('#menudatagrid').datagrid({
url : '../servlet/menu/getMenu',
data : {
"page" : curr,
"rows" : total
},
method : 'post',
columns : [ [.......]]
});
})
后台reslet接收方法:
@POST
@Path("getMenu")
public JSONObject addMenu1(Representation entity) {
System.out.println("----------------------------");
System.out.println("新增数据");
Form form = new Form(entity);
String page = form.getFirstValue("page");
String row = form.getFirstValue("rows");
System.out.println("---------page"+page);
System.out.println("----------rows:"+row);
//当前页
int intPage = Integer.parseInt((page == null || page == "0") ? "1":page);
//每页显示条数
int number = Integer.parseInt((row == null || row == "0") ? "10":row);
//每页的开始记录 第一页为1 第二页为number +1
int start = (intPage-1)*number;
int count= ResourceHelper.findMenuCount();
ArrayList<Menu> menulist = (ArrayList<Menu>) ResourceHelper.findMenu2(start,number);
System.out.println(menulist);
ArrayList tt = new ArrayList();
for (int i = 0; i < menulist.size(); i++) {
Map<String, String> map = new HashMap();
map.put("menuid", menulist.get(i).getMenuId() + "");
map.put("menulevel", menulist.get(i).getMenuLevel() + "");
map.put("parentmenuid", menulist.get(i).getParentMenuId() + "");
map.put("menuname", menulist.get(i).getMenuName() + "");
map.put("url", menulist.get(i).getUrl());
map.put("menuorder", menulist.get(i).getMenuOrder() + "");
tt.add(map);
}
System.out.println("调用到json");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("total", count);
jsonObject.put("rows", tt);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
连接数据库使用的mybatis,值得一提的是:ArrayList<Menu> menulist = (ArrayList<Menu>) ResourceHelper.findMenu2(start,number);
这两个参数代表的意思:start代表传进来的page页开始的行数,number代表每页显示的行数。
然后连接数据库的时候使用:try {
RowBounds rb = new RowBounds(start,end);
list = session.selectList("。。。。。。",1,rb);
} finally {
session.close();
}
注:使用上述方式取出的LIST就是第几页显示的数据,不会将表中数据全部取出。比如说的每页显示10条数据,那么这样取只会取出10条数据。
第二个参数:1 这个我也没有查清楚代表什么,1是我瞎写的。但是效果能够达到。