这两天搞了点网页上的分页,真的是搞得欲仙欲死,现在也只能说是搞了个入门的水平吧,现在就来写下这几天的收获。

     用的是datatables的框架,先来个框架的地址:https://datatables.net/,本人理解也不是很深,直接结合代码来解释下。


现在还没有写完,所以不能上传资源,现在只能说关键部分。

首先一个xml文件:

<head>
<meta charset="UTF-8">
<title>jquery DataTables插件自定义分页ajax实现</title>
<link href="../static/css/bootstrap.min.css" rel="stylesheet"
	media="screen">
<link href="../static/css/dataTables.bootstrap.min.css" rel="stylesheet"
	media="screen">
<link href="../static/css/jquery.dataTables.min.css" rel="stylesheet"
	media="screen">
</head>
<body>
	<div class="row-fluid">
		<h3>JQuery DataTables插件自定义分页Ajax实现</h3>
		<table id="example" class="display" width="100%">
			<thead>
				<tr>
					<th>ID</th>
					<th>创建时间</th>
					<th>别名</th>
				</tr>
			</thead>
			<tfoot>
				<tr>
					<th>ID</th>
					<th>创建时间</th>
					<th>别名</th>
				</tr>
			</tfoot>
		</table>
	</div>

	<script type="text/javascript">
    var lang = {
      "sProcessing" : "处理中...",
      "sLengthMenu" : "每页 _MENU_ 项",
      "sZeroRecords" : "没有匹配结果",
      "sInfo" : "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
      "sInfoEmpty" : "当前显示第 0 至 0 项,共 0 项",
      "sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
      "sInfoPostFix" : "",
      "sSearch" : "搜索:",
      "sUrl" : "",
      "sEmptyTable" : "表中数据为空",
      "sLoadingRecords" : "载入中...",
      "sInfoThousands" : ",",
      "oPaginate" : {
        "sFirst" : "首页",
        "sPrevious" : "上页",
        "sNext" : "下页",
        "sLast" : "末页",
        "sJump" : "跳转"
      },
      "oAria" : {
        "sSortAscending" : ": 以升序排列此列",
        "sSortDescending" : ": 以降序排列此列"
      }
    };

    //初始化表格
    //     $.get('/MiniWms/company/page', function(data) {
    //       var table = $("#example").DataTable({
    //         data : data,
    //         "columns" : [ {
    //           "data" : "id"
    //         }, {
    //           "data" : "created"
    //         }, {
    //           "data" : "anothername"
    //         } ]
    //       });
    //     })

    $('#example').DataTable({
//       "ajax" : {
        
//       	url:"/MiniWms/company/all",
//     	dataSrc:function(data){return data}
//       },
 			"processing": true,
            "serverSide": true,
		"ajax": '/MiniWms/company/page',
      "columns" : [ {//data的字段与你后端传递过来的要对应
        "data" : "id"
      }, {
        "data" : "created"
      }, {
        "data" : "anothername"
      } ],
//       "columnDefs": [
//         {
//             "targets": [3],
//             "data": "anothername",
//             "render": function(data, type, full) {
//                 return "<a href='/MiniWms/company/page?=" + data + "'>Update</a>";
//             }
//         }
//     ]
    });
  </script>
</body>



由于我是本地的js与css,所以给你们链接,链接不是新的,所以可以去下载最新的https://datatables.net/download/index


<link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link href="http://cdn.bootcss.com/datatables/1.10.11/css/dataTables.bootstrap.min.css" rel="stylesheet" media="screen">
    <link href="http://cdn.bootcss.com/datatables/1.10.11/css/jquery.dataTables.min.css" rel="stylesheet" media="screen">



<script src="http://cdn.bootcss.com/datatables/1.10.11/js/jquery.js"></script>
<script src="http://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/jquery.dataTables.min.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/dataTables.bootstrap.min.js"></script>




然后可以去用相应的js与css。上面就是前端的分页。但是需要注意的是前段接受的数据类型是

{draw: null, recordsTotal: , recordsFiltered: ,data[]}

是这种类型的,所以后端传递数据的时候要封装一下。下面是封装的类:

Pagination.java:

package ndm.miniwms.vo;

import java.util.List;

public class Pagination<T> {
	private Integer draw;
	private Integer recordsTotal;
	private Integer recordsFiltered;
	private List<T> data;
	public Integer getDraw() {
		return draw;
	}
	public void setDraw(Integer draw) {
		this.draw = draw;
	}
	public Integer getRecordsTotal() {
		return recordsTotal;
	}
	public void setRecordsTotal(Integer recordsTotal) {
		this.recordsTotal = recordsTotal;
	}
	public Integer getRecordsFiltered() {
		return recordsFiltered;
	}
	public void setRecordsFiltered(Integer recordsFiltered) {
		this.recordsFiltered = recordsFiltered;
	}
	public List<T> getData() {
		return data;
	}
	public void setData(List<T> data) {
		this.data = data;
	}

}

上面就是封装的类型的类,需要注意的是list中的泛型就是你要传递的类的对象。



后端分页:

后端分页就是说前段要把分页的起始位置传递过去,也就是start,这个是框架中封装好的,所以我们需要知道前段传递的参数都是什么。

draw:1
columns[0][data]:id
columns[0][name]:
columns[0][searchable]:true
columns[0][orderable]:true
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:created
columns[1][name]:
columns[1][searchable]:true
columns[1][orderable]:true
columns[1][search][value]:
columns[1][search][regex]:false
columns[2][data]:anothername
columns[2][name]:
columns[2][searchable]:true
columns[2][orderable]:true
columns[2][search][value]:
columns[2][search][regex]:false
order[0][column]:0
order[0][dir]:asc
start:0
length:10
search[value]:
search[regex]:false

上面就是前段传递过去的参数,我们在后端要接收一下这个数据,里面关键的我们需要start,起始位置,以及length,这个是页面的个数,所以我们要在后端封装一个类来接受这些参数。当然还有draw,是刷新的次数,这个我们不用管。

TableModelVO.java:

package ndm.miniwms.vo;

public class TableModelVO {
	private Integer draw;
	private Integer start;
	private Integer length;
	public Integer getDraw() {
		return draw;
	}
	public void setDraw(Integer draw) {
		this.draw = draw;
	}
	public Integer getStart() {
		return start;
	}
	public void setStart(Integer start) {
		this.start = start;
	}
	public Integer getLength() {
		return length;
	}
	public void setLength(Integer length) {
		this.length = length;
	}
}



接受到参数接下来就是怎么用了。


@RequestMapping(value="/company/page",method = RequestMethod.GET)
	@ResponseBody
	public Pagination<CompanyDetails> selectTab(TableModelVO tableModelVO1){
		int a = tableModelVO1.getStart()/tableModelVO1.getLength()+1;
		System.out.println(a);
		Pagination<CompanyDetails> pagination = new Pagination<>();
		
		TableModelVO tableModelVO = new TableModelVO();
		tableModelVO.setStart(a);
		tableModelVO.setLength(tableModelVO1.getLength());
		pagination.setData(companyService.selectTab(tableModelVO));
		pagination.setDraw(tableModelVO.getDraw());
//		pagination.setRecordsTotal(companyService.selectTab(tableModelVO).size());
		pagination.setRecordsFiltered(companyService.all().size());
		pagination.setRecordsTotal(companyService.all().size());
		
//		return new ResponseEntity<Pagination>(new Pagination(), HttpStatus.OK);
		return pagination;
	}



其他的我就不写了,分页的在前面都有写,这个项目,过段时间我会上传资源。