datatable 分页实例
1.使用datatable前台分页,需要后台返回全部数据,返回lisit
2.如果是后台分页 则后台需要获取分页参数,页面中要加
"searchable":true, "bServerSide": true
这两个属性,不需要 dataSrc : "" 这个属性
返回DataTablePageDto 分页对象,查询的list结果set到分页对象中
页面代码如下
currentDt = $table.DataTable({ retrieve: true, aoColumnDefs:[{"bSortable": false, "aTargets": [0]},{"bSortable": false, "aTargets": [1]}],//指定某列不排序 ajax : { url : baseUrl + "list", data:{orgid:v}, dataSrc : "" //前台分页要加该属性 }, fnHeaderCallback:function(){ $("#sp").html("<input type='checkbox' id='selectAll' onchange='checkInp()'>"); }, fnDrawCallback: function() { this.api().column(1).nodes().each(function(cell, i) { cell.innerHTML = i + 1; }); }, columns : [ { title:"<span id='sp'><input type='checkbox' id='selectAll' onchange='checkInp()'></span>", data: "alink" }, { title:"<span class='num_tab'>序号</span>", data :null, targets: 0 }, { title:"<span class='name'>姓名</span>", data:"name" }, { title:"<span class='sex_list'>性别</span>", data:"sex",
"render":function(data,type,row,meta){
if(data=='1'){
data='男';
}else if(data=='2'){
data='女';
}else{
data='';
}
return data;
}
},
{ title:"现任职务", data:"xrPresent" }, { title:"<span class='jiguan'>籍贯</span>", data:"origin" }, { title:"入党时间", data:"rdTime" } , { title : "<span class='btn_td'>操作</span>", data : "id", createdCell:function(td,tdData){ var operator = []; /** 查看不能用 框架样式 请调整。。。。。。***/ <s:hasPermission name="/admin/gov/sigin_list"> //选调生签到信息列表 var qdBtn = G.viewSigin(tdData,tz); operator.push(qdBtn); </s:hasPermission> /** 查看不能用 框架样式 请调整。。。。。。***/ <s:hasPermission name="/admin/gov/cadre_info"> var tz="1";//选调生信息列表 var xqBtn = G.viewBtn(tdData,tz); operator.push(xqBtn); </s:hasPermission> <s:hasPermission name="/admin/gov/check_pre"> var checkBtn = G.createCheckBtn(tdData); operator.push(checkBtn); </s:hasPermission> <s:hasPermission name="/admin/gov/cadre_update"> var suoBtn = G.createSuo1Btn(tdData); operator.push(suoBtn); </s:hasPermission> <s:hasPermission name="/admin/gov/cadre_delete"> var delBtn = G.createSuo2Btn(tdData); operator.push(delBtn); </s:hasPermission> <s:hasPermission name="/admin/gov/cadre_view"> var view = G.createViewBtn(tdData); operator.push(view); </s:hasPermission> $(td).html(operator); } } ], });
// 执行查询后的列表全选方法
function checkInp(){
var flag = false;
if($("#selectAll").is(':checked')){
flag = true;
}else{
flag = false;
}
$("input[name='gov-list']").each(function() {
$(this).attr("checked", flag);
});
java后台方法如下
//DataTablePageDto 分页对象,searchValue 搜索参数
@RequestMapping("/list") @ResponseBody public DataTablePageDto<TorgCadre> addCadre(Integer orgid, String ids,DataTablePageDto tablePage, HttpServletRequest request) throws UnsupportedEncodingException { String searchValue = request.getParameter("search[value]"); //搜索参数 searchValue = new String(searchValue.getBytes("iso8859-1"),"UTF-8"); //解决中文乱码 DataTablePageDto<TorgCadre> dataTablePageDto=new DataTablePageDto<TorgCadre>();//分页对象 dataTablePageDto.setStart(tablePage.getStart()); //设置起始查询页 dataTablePageDto.setLength(tablePage.getLength()); //设置查询条数 dataTablePageDto.setDraw(tablePage.getDraw()); //绘制次数 StringBuffer hql = new StringBuffer("FROM TorgCadre WHERE status=? and name like ?"); List<TorgCadre> list = new ArrayList(); if (orgid != null && orgid > 0) { hql.append(" and orgid in ( "); hql.append(getAllOrgidsTwo(orgid)); // hql.append(getAllOrgids(orgid)); hql.append(" ) "); hql.append(levelOrder()); } else if (ids != null && !ids.trim().equals("")) { hql.append(" and id in ( "); hql.append(ids); hql.append(" ) "); hql.append(levelOrder()); }else if("admin".equals(getLoginUserinfo().getUsername())){ hql.append(levelOrder()); }else{ hql.append(" and 1=-1"); dataTablePageDto.setRecordsTotal(0L); dataTablePageDto.setRecordsFiltered(0L); } String hqlCount=hql.toString().replace("FROM", "select count(1) from"); Long total = cadreService.selectQueryCount(hqlCount.toString(),"1",searchValue);//总记录数 dataTablePageDto.setRecordsTotal(total); dataTablePageDto.setRecordsFiltered(total); list = cadreService.selectForList(hql.toString(),dataTablePageDto, "1",searchValue); for (TorgCadre t : list) { t.setTorgCadreFamilies(null); t.setTorgCadreResumes(null); t.setCheck(null); t.setAlink("<input type='checkbox' name='gov-list' value=" + t.getId() + ">"); } User obj = (User) getSession().getAttribute(SK.USER_INFO); log.info("查看列表成功"); dataTablePageDto.setData(list); return dataTablePageDto;//返回分页对象 }
分页对象实体类如下
//该后台分页是采用hibernate分页查询
public class DataTablePageDto<T> { private List<T> data; //包含的数据 private Integer draw=1; //绘制次数 private Long recordsTotal;//总长度 private Long recordsFiltered;//过滤后的长度 private Integer start=0; //第几条数据开始查询 private Integer length=10; //每页显示几条 public DataTablePageDto() { } geter seter方法省略...... }
附其他分页实体
package com.diamond.core.feature.orm.hibernate; import java.util.ArrayList; import java.util.List; /** * Mybatis分页参数及查询结果封装. 注意所有序号从1开始. * * @param <T> * Page中记录的类型. * @author StarZou * @since 2014年5月18日 下午1:34:32 **/ public class Page<T> { // --分页参数 --// /** * 页编号 : 第几页 */ protected int pageNo = 1; /** * 页大小 : 每页的数量 */ protected int pageSize = 15; /** * 偏移量 : 第一条数据在表中的位置 */ protected int offset; /** * 限定数 : 每页的数量 */ protected int limit; // --结果 --// /** * 查询结果 */ protected List<T> result = new ArrayList<T>(); /** * 总条数 */ protected int totalCount; /** * 总页数 */ protected int totalPages; // --计算 数据库 查询的参数 : LIMIT 3, 3; LIMIT offset, limit; --// /** * 计算偏移量 */ private void calcOffset() { this.offset = ((pageNo - 1) * pageSize); } /** * 计算限定数 */ private void calcLimit() { this.limit = pageSize; } // -- 构造函数 --// public Page() { this.calcOffset(); this.calcLimit(); } public Page(int pageNo, int pageSize) { this.pageNo = pageNo; this.pageSize = pageSize; this.calcOffset(); this.calcLimit(); } public Page(int start,int pageSize,String keyword){ this.offset=start; this.pageSize = pageSize; } // -- 访问查询参数函数 --// /** * 获得当前页的页号,序号从1开始,默认为1. */ public int getPageNo() { return pageNo; } /** * 获得每页的记录数量,默认为1. */ public int getPageSize() { return pageSize; } /** * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从1开始. */ public int getFirst() { return ((pageNo - 1) * pageSize) + 1; } /** * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从0开始. */ public int getOffset() { return offset; } public int getLimit() { return limit; } // -- 访问查询结果函数 --// /** * 取得页内的记录列表. */ public List<T> getResult() { return result; } /** * 设置页内的记录列表. */ public void setResult(final List<T> result) { this.result = result; } /** * 取得总记录数, 默认值为-1. */ public int getTotalCount() { return totalCount; } /** * 设置总记录数. */ public void setTotalCount(final int totalCount) { this.totalCount = totalCount; this.totalPages = this.getTotalPages(); } /** * 根据pageSize与totalCount计算总页数, 默认值为-1. */ public int getTotalPages() { if (totalCount < 0) { return -1; } int pages = totalCount / pageSize; return totalCount % pageSize > 0 ? ++pages : pages; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } }