DWR 本身未提供分页的功能,所以这部分要自己来实现。如果把后台的所有记录都拉到页面用 JS 分页,那是很不现实的。因此,虽说是 DWR 分页,但还得服务端来支持,由服务端的远程方法只返回当前页所显示的记录,DWR 自己要明确当前是第几页,是否有上一页、下一页。
还是用代码来说明吧,分解为三部分代码:
1. 暴露给 DWR 调用的 Java 的远程方法
2. JS 的 DWR 调用
3. 显示分页导航栏
DWR 要调用的 Java 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/** * 根据预定的条件查询记录 conditions 为查询条件 pageNo 页码,从 1 开始, pageSize 每页的记录数 */ public Map getPageByxtents(Map conditions, int pageNo, int pageSize) throws Exception { //获得总记录数 Integer recordCount = (Integer) (getSqlMapClient().queryForObject("getCountByExtents", conditions)); // 总页数 int pageCount = (int) Math.ceil(recordCount.doubleValue() / pageSize); // pageNO 超界则取接近的边界值 pageNo = (pageNo > pageCount) ? pageCount : (pageNo < 1 ? 1 : pageNo); int skip = (pageNo - 1) * pageSize; //这里用的是 iBatis 返回当前页的数据,其他如 JDBC、Hibernate 持久化方化作相应变化 List data = getSqlMapClient().queryForList("getByExtents",conditions, skip, pageSize); Map resultMap = new HashMap(); resultMap.put("data", data); resultMap.put("recordCount", recordCount); //要清楚 JS 得到的数据的结构 return resultMap; } |
JS 的 DWR 调用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//分页获取查询到的记录 function search(pageNo){ var conditions = {magic:'Unmi',start:100}; var pageSize = $('pageSize').value; //调用前面代码的 getPageByExtends 方法 YouDwrRemoteObject.getPageByExtents(conditions,pageNo,pageSize,{ callback:function(data){ DWRUtil.removeAllRows("listTable"); //移除页面表格中的记录 addTableRows(data.data); //把返回的数据添加到表格中, showPageBar(data,pageNo);//调用显示页面导航的函数 }, errorHandler:function(msg,ex){ alert('查询记录错误!') } }); } |
显示分页导航栏:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//显示页码导航 function showPageBar(data,pageNo){ var pageCount = Math.ceil(data.recordCount/$('pageSize').value); //总页数 var pageStr = "共 " + data.recordCount +" 条记录 第 "+ pageNo+"/"+pageCount + " 页 "; if(pageNo > 1) { pageStr += "<a href='javascript:search(1)'>首 页</a> <a href='javascript:search("+(pageNo-1)+")'>上一页</a> "; } if(pageNo < pageCount){ pageStr += "<a href='javascript:search("+(pageNo+1)+")'>下一页</a> <a href='javascript:search("+pageCount+")'>末 页</a> "; } pageStr += " "; $('pageDiv').innerHTML= pageStr; //"共 115 条记录 第 2/12 页 首 页 上一页 下一页 末 页"; } |
显示的页码导航效果是:
共 115 条记录 第 3/12 页 首 页 上一页 下一页 末 页
本文链接 https://yanbin.blog/dwr-simple-pagination/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
页码导航这个代码发现两个问题:
1.那么多字符串用+,效率低,用数组然后join比较好
2.页码导航都被你写死样式了,如果我记录数要在后面就的改代码了,最好用模板来实现
昨天关于绿吧的文章是强制删掉的吗?
哎,应该庆幸我们活在天朝的国度里,派对对我们保护的无微不致,才有现在的耳根清净。四处一片歌舞升平,环顾墙外,国外人民都生活在水升火热之中。总体来说,中国教育是非常成功的,我们不是从小都被教育着要听派对的话,这是实话。
@luguo
不在循环里拼接字符串,这个效率问题应该不大
这里是个简单的应用,用模板肯定要好的,还有“如果我记录数要在后面就的改代码了”不是很明白。
还不错,收藏了