Datatables(1.10以上版本)服务器端分页(Java)

Html:

<table class="table table-striped table-bordered table-hover table-condensed" id="ou-table">
	<thead>
		<tr>
		  <th>序号</th>
		  <th>名称</th>
                  <th>部门领导</th>
                  <th>标识</th>
                  <th>上级组织</th>
		  <th>操作</th>
		</tr>
	</thead>
	<tbody>
	</tbody>
</table>

js:

 $('#ou-table').dataTable({
        "processing": true,
        "serverSide": true,//启用服务器端分页
        "destroy": true,
        "pageLength": 10,
        "ordering": false,
        // "renderer": "bootstrap",//渲染样式:Bootstrap和jquery-ui
        "pagingType": "simple_numbers",//分页样式:simple,simple_numbers,full,full_numbers
        "autoWidth": true,
        "stateSave": true,//保持翻页状态,和comTable.fnDraw(false);结合使用
        "searching": true,//datatables默认搜索
        "ajax": {
            "url": "/ou/getOus",
            "type": 'POST',
            "data": function (d) {
                var param = {};
                param.draw = d.draw;
                param.start = d.start;
                param.length = d.length;
                param.search=d.search.value;
                param.ou=ou;
                return param;//自定义需要传递的参数。
            },
            "dataSrc": function (str) {
                var data;
                if (typeof str === 'object') {
                    data = str;
                }
                else {
                    data = eval("(" + str + ")");
                }
                var datas=data.data;
                for(var i=0,l=datas.length;i<l;i++){
                    if(!datas[i].hasOwnProperty("managedBy")){
                        datas[i].managedBy="";
                    }
                }
                return str.data;
            }
        },
        "columns": [
            {"data": null},
            {"data": "name"},
            {"data": "managedBy"},
            {"data": "uid", "visible": false},
            {"data": "pid"},
            {"data": null}
        ],
        columnDefs: [
            {
                targets: 0,
                defaultContent: "<input type='checkbox' name='checkList'>"
            },
            {
                targets: -1,
                defaultContent: "<div class='btn-group'>"+
                "<button id='oueditRow' class='btn btn-primary btn-sm' type='button'><i class='glyphicon glyphicon-user'></i></button>"+
                "<button id='oudelRow' class='btn btn-primary btn-sm' type='button'><i class='glyphicon glyphicon-edit'></i></button>"+
                "</div>"
            }
        ],
        //在每次table被draw完后调用
        fnDrawCallback: function(){
            var api = this.api();
            //获取到本页开始的条数
            var startIndex= api.context[0]._iDisplayStart;
            api.column(0).nodes().each(function(cell, i) {
                cell.innerHTML = startIndex + i + 1;
            })
        },
        "language": {
            "lengthMenu": "每页 _MENU_ 条记录",
            "processing": "数据加载中...",
            "paginate": {
                "previous": "上一页",
                "next": "下一页"
            },
            "zeroRecords": "没有找到符合条件的数据",
          //  "info": "第 _PAGE_ 页 ( 总共 _PAGES_ 页 )",
            "info": "当前显示第 _START_ 到 _END_ 项, 共 _TOTAL_ 项",
            "infoEmpty": "无记录",
            "infoFiltered": "(从 _MAX_ 条记录过滤)",
            "search": "搜索:"
        }

    });

后台:

 @RequestMapping(value="/getOus",produces = "text/json;charset=UTF-8")
    @ResponseBody
    public JSONObject getOus(HttpServletRequest request, QueryCondition query){
        System.out.println(query.toString());
        List<OU> ous=ouService.getOuByQuery(query);
        DatatablesView<OU> dataTable=new DatatablesView<>();
        dataTable.setDraw(query.getDraw());
        dataTable.setRecordsFiltered(ouService.getOuSize(query));
        dataTable.setRecordsTotal(ouService.getOuSize(query));
        dataTable.setData(ous);
       // String data = JSON.toJSONString(dataTable);
       // System.out.println(data.toString());
        JSONObject data=(JSONObject)JSON.toJSON(dataTable);
        System.out.println(data.toString());
        return data;
    }
public class DatatablesView<T> {
    private List<T> data; //data 与datatales 加载的“dataSrc"对应

    private int recordsTotal;

    private int recordsFiltered;

    private int draw;

    public DatatablesView() {
    }
recordsTotal、recordsFiltered、draw必须返回给前台,query是前台自定义的参数,当然可以通过request获取datatables默认的参数


出现过下面这种情况,是后台返回的是string,前台接收后解析格式不对,后来改成后台返回json解决

如果出现页码只有一页实际有多页的问题,recordsTotal、recordsFiltered参数值应该是总的查询条数,而非过滤的条数



返回前台的数据格式

{"recordsFiltered":15,"data":[ 
   {"uid":"","name":"拆迁管理中心","pid":"","managedBy":""},
   {"uid":"","name":"审计监察中心","pid":","managedBy":""},
   {"uid":"","name":"立项及专规申报中心","pid":"","managedBy":""},
   {"uid":"","name":"测试部1","pid":"","managedBy":""},
   {"uid":"","name":"测试部2","pid":"","managedBy":""}
 ],"draw":4,"recordsTotal":15}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值