最近看了下datatables,模仿写了一个小例子,和你们分享一下。效果图以下javascript
jsp代码:css
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>快递公司列表</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.css"> <script type="text/javascript" charset="utf8" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript" charset="utf8" src="js/jquery.dataTables.js"></script> <script type="text/javascript"> var rootPath = '${pageContext.request.contextPath}'; </script> </head> <body> <form> <span>编号:</span> <input type="text" placeholder="编号" id="id-search"> <span>名称:</span> <input type="text" placeholder="名称" id="name-search"> <span>状态:</span> <select id="status-search"> <option value="">所有</option> <option value="1">能够查发</option> <option value="2">能够连接</option> <option value="3">仅供查询</option> <option value="4">不可用</option> </select> <button type="button" id="btn_search">查询</button> <a href="#" data-column="0">影藏编号</a> <a href="#" data-column="1">影藏名称</a> <a href="#" data-column="2">影藏状态</a> <a href="#" data-column="3">影藏电话</a> <a href="#" data-column="4">影藏网址</a> <a href="#" data-column="5">影藏操做</a> </form> <table id="table" class="display"> <thead> <tr> <th>编号</th> <th>名称</th> <th>状态</th> <th>电话</th> <th>网址</th> <th>操做</th> </tr> </thead> <tbody></tbody> </table> <script type="text/javascript" src="js/constant.js"></script> <script type="text/javascript"> $(function(){ var $table = $("#table"); var _table = $table.dataTable($.extend(true,{},CONSTANT.DATA_TABLES.DEFAULT_OPTION, { ajax : function(data, callback, settings) { //封装请求参数 var param = userManage.getQueryCondition(data); $.ajax({ type: "GET", url: rootPath+"/carrier/getCarrierByPage.action", cache : false, //禁用缓存 data: param, //传入已封装的参数 dataType: "json", success: function(result) { //异常判断与处理 if (result.errorCode) { alert("查询失败"); return; } //封装返回数据 var returnData = {}; returnData.draw = data.draw;//这里直接自行返回了draw计数器,应该由后台返回 returnData.recordsTotal = result.total;//总记录数 returnData.recordsFiltered = result.total;//后台不实现过滤功能,每次查询均视做所有结果 returnData.data = result.pageData; //调用DataTables提供的callback方法,表明数据已封装完成并传回DataTables进行渲染 //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕 callback(returnData); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("查询失败"); } }); }, //绑定数据 columns: [ { data: "carrierId",//字段名 }, { data: "carrierName",//字段名 }, { data : "carrierStatus",//字段名 render : function(data,type, row, meta) { return (data == 1? "能够查发":data == 2?"能够连接":data == 3?"仅供查询":"不可用"); } }, { data : "carrierPhone",//字段名 }, { data : "carrierLink",//字段名 orderable : false,//禁用排序 render : CONSTANT.DATA_TABLES.RENDER.ELLIPSIS//alt效果 }, { data: null,//字段名 defaultContent:"",//无默认值 orderable : false//禁用排序 } ], "createdRow": function ( row, data, index ) { //不使用render,改用jquery文档操做呈现单元格 var $btnEdit = $('<button type="button" class="btn-edit">修改</button>'); var $btnDel = $('<button type="button" class="btn-del">删除</button>'); $('td', row).eq(5).append($btnEdit).append($btnDel); }, "drawCallback": function( settings ) { //渲染完毕后的回调 //默认选中第一行 //$("tbody tr",$table).eq(0).click(); } })).api();//此处需调用api()方法,不然返回的是JQuery对象而不是DataTables的API对象 //查询 $("#btn_search").click(function(){ _table.draw(); }); //行点击事件 $("tbody",$table).on("click","tr",function(event) { $(this).addClass("active").siblings().removeClass("active"); //获取该行对应的数据 var item = _table.row($(this).closest('tr')).data(); userManage.showItemDetail(item); }); //按钮点击事件 $table.on("click",".btn-edit",function() { //点击编辑按钮 var item = _table.row($(this).closest('tr')).data(); userManage.editItemInit(item); }).on("click",".btn-del",function() { //点击删除按钮 var item = _table.row($(this).closest('tr')).data(); userManage.deleteItem(item); }); //影藏列 $('a').on( 'click', function (e) { var cut = $(this).text() if(cut.indexOf("显示")>-1){ $(this).text("影藏"+cut.split("示")[1]) }else{ $(this).text("显示"+cut.split("藏")[1]) } e.preventDefault(); var column = _table.column( $(this).attr('data-column') ); column.visible( ! column.visible() ); } ); }); var userManage = { getQueryCondition : function(data) { var param = {}; //组装排序参数 if (data.order&&data.order.length&&data.order[0]) { switch (data.order[0].column) { case 0: param.orderColumn = "carrier_id";//数据库列名称 break; case 1: param.orderColumn = "carrier_name";//数据库列名称 break; case 2: param.orderColumn = "carrier_status";//数据库列名称 break; case 3: param.orderColumn = "carrier_phone";//数据库列名称 break; default: param.orderColumn = "carrier_id";//数据库列名称 break; } //排序方式asc或者desc param.orderDir = data.order[0].dir; } param.id = $("#id-search").val();//查询条件 param.name = $("#name-search").val();//查询条件 param.status = $("#status-search").val();//查询条件 //组装分页参数 param.startIndex = data.start; param.pageSize = data.length; param.draw = data.draw; return param; }, editItemInit : function(item) { //编辑方法 alert("编辑"+item.carrierId+" "+item.carrierName); }, deleteItem : function(item) { //删除 alert("删除"+item.carrierId+" "+item.carrierName); }, showItemDetail: function(item){ //点击行 alert("点击"+item.carrierId+" "+item.carrierName); } }; </script> </body> </html>
其他js和css都是datatables官方提供的html
constants.jsjava
/*常量*/ var CONSTANT = { DATA_TABLES : { DEFAULT_OPTION : { //DataTables初始化选项 language: { "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": ": 以降序排列此列" } }, autoWidth: false, //禁用自动调整列宽 stripeClasses: ["odd", "even"],//为奇偶行加上样式,兼容不支持CSS伪类的场合 order: [], //取消默认排序查询,不然复选框一列会出现小箭头 processing: false, //隐藏加载提示,自行处理 serverSide: true, //启用服务器端分页 searching: false //禁用原生搜索 }, COLUMN: { CHECKBOX: { //复选框单元格 className: "td-checkbox", orderable: false, width: "30px", data: null, render: function (data, type, row, meta) { return '<input type="checkbox" class="iCheck">'; } } }, RENDER: { //经常使用render能够抽取出来,如日期时间、头像等 ELLIPSIS: function (data, type, row, meta) { data = data||""; return '<span title="' + data + '">' + data + '</span>'; } } } };
后台代码:jquery
@RequestMapping(value = "/getCarrierByPage") @ResponseBody public String getCarrierByPage() throws Exception{ //直接返回前台 String draw = request.getParameter("draw"); //数据起始位置 String startIndex = request.getParameter("startIndex"); //每页显示的条数 String pageSize = request.getParameter("pageSize"); //获取排序字段 String orderColumn = request.getParameter("orderColumn"); if(orderColumn == null){ orderColumn = "carrier_id"; } //获取排序方式 String orderDir = request.getParameter("orderDir"); if(orderDir == null){ orderDir = "asc"; } //查询条件 String carrierId = request.getParameter("id"); String carrierName = request.getParameter("name"); String carrierStatus = request.getParameter("status"); XcxCarrier x = new XcxCarrier(); if(null != carrierId && !"".equals(carrierId)){ x.setCarrierId(Long.parseLong(carrierId)); } x.setCarrierName(carrierName); if(null != carrierStatus && !"".equals(carrierStatus)){ x.setCarrierStatus(Integer.parseInt(carrierStatus)); } PageHelper.offsetPage(getPageNo(Integer.parseInt(startIndex)), getPageSize(Integer.parseInt(pageSize))); List<XcxCarrier> result = this.xcxCarrierService.querySelectByCondition(orderColumn, orderDir, x); PageInfo<XcxCarrier> pageInfo = new PageInfo<XcxCarrier>(result); Map<Object, Object> info = new HashMap<Object, Object>(); System.out.println(JSONObject.fromObject(pageInfo)); info.put("pageData", pageInfo.getList()); info.put("total", pageInfo.getTotal()); info.put("draw", draw); return JSONObject.fromObject(info)+""; }