datatables+springmvc+bootstrap实现分页

简介: datatables+springmvc+bootstrap实现分页

datatables是前端的一个实现分页的插件,支持主流的浏览器,非常好用。datatables网址:http://www.datatables.club/


里面有许多的样式,还支持bootstrap。这里用datatables+springmvc+bootstrap做了一个样例。


 效果图:


20180504215928562.png

数据是从服务器获取的,因为数据库不大,所有数据都通过json全部都传到前台了,datatables获取到数据就可以实现自动分页。

datatables使用

前台页面引入需要的js,css,然后添加一个table,表头自己定义

 <!--第一步:引入Javascript / CSS (CDN)-->  
    <!-- DataTables CSS -->  
    <link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.css">  
    <!-- jQuery -->  
    <script type="text/javascript" charset="utf8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>  
    <!-- DataTables -->  
    <script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>  
   .......................................................................................................................  
               <!-- 显示表格边框table-bordered  缩小表格间距table-condensed -->  
        <table id="example" class="table table-bordered table-condensed">  
            <thead>  
                <tr>  
                    <th><input type="checkbox" name="allChecked" /></th>  
                    <th>id</th>  
                    <th>学号</th>  
                    <th>姓名</th>  
                    <th>章节得分</th>  
                    <th>oj习题得分</th>  
                    <th>智能达标测试得分</th>  
                    <th>总得分</th>  
                    <th>操作</th>  
                </tr>  
            </thead>  
        </table>  

js使用:

$(function() {  
    var table = $("#example").DataTable({  
        "aLengthMenu":[10,20,40,60],//每页显示的条数,下拉框  
        "searching":true,//禁用搜索  
        "lengthChange":true,  
        "paging": true,//开启表格分页  
        "bProcessing" : true,//翻页时显示正在加载中  
        //"bServerSide" : true,//服务端模式  
        "bAutoWidth" : false,//是否自动适应宽度  
        "sort" : "position",//禁用排序  
        "deferRender":true,//延迟渲染   
        "bStateSave" : true, //在其他页面刷新,会自动到第一页  
        "length" : 10,//每页显示的条数  
        "start" : 0,  
        "dom": '<l<\'#topPlugin\'>f>rt<ip><"clear">',  
        "ordering": false,//全局禁用排序  
        "ajax": {  
                "type": "POST",  
                "url":contextPath + "/showZhangScoreService",  
                //查询传的参数  
                /*"data":function(d){  
                    d.state=$("#state").val();  
                    d.deptname=$("#deptname").val().trim();  
                    d.startTime=$("#startTime").val();  
                    d.endTime=$("#endTime").val();  
                }*/  
        },  
        "aoColumns" : [{  
            //指的是类里面的id,存放  
            "mData" : "runId",//类里面对应的属性  
            "orderable": false , // 禁用排序  
            "sDefaultContent" : "",//默认值  
            "sWidth" : "2%"//列的宽度  
                },{  
                    //指的是类里面的id,存放   
                    "mData" : "runId",//类里面对应的属性  
                    "orderable": false , // 禁用排序  
                    "sDefaultContent" : "",//默认值  
                    "sWidth" : "5%"//列的宽度  
                },   
                {  
                    "mData" : "userId",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : "",  
                    "sWidth" : "10%"  
                }, {  
                    "mData" : "userName",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : "",  
                    "sWidth" : "10%"  
                },  
                {  
                    "mData" : "frist",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : "",  
                    "sWidth" : "10%"  
                },  
                {  
                    "mData" : "second",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : '',  
                    "sWidth" : "10%"  
                },  
                {  
                    "mData" : "thrid",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : "",  
                    "sWidth" : "10%"  
                },  
                {  
                    "mData" : "total",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : '',  
                    "sWidth" : "10%"  
                },  
                {  
                    "mData" : "runId",  
                    "orderable" : false, // 禁用排序  
                    "sDefaultContent" : '',  
                    "sWidth" : "10%",  
                    "render":function(data, type, full, meta){  
                    return  data='<button id="deleteOne" class="btn btn-danger btn-sm" data-id='+data+'>删 除</button>';  
                    }     
                }],  

如果数据库比较大的话是要开启"bServerSide" : true,//服务端模式,这样可以根据传入的参数去数据库取数据,本案例是取所有的数据,所以没有开启服务器模式。

没有开启服务器模式的请求参数,在开发者模式可以看到参数是比较少的。

20180504221233857.png

开启服务器模式后参数会变多,有start和length这两个参数,start表示开始取数据的位置,length表示取的数量,后端接收到这两个参数,就可以根据这个来查询。

20180504221513488.png

springmvc返回json数据

@Autowired  
private ZhangScoreService zhangScoreService;  
@RequestMapping("/showZhangScoreService")  
@ResponseBody  
public Map<String, Object> showZhangScoreService() throws Exception {  
    List<ZhangScore> ZhangScorelist = zhangScoreService.selsectAllZhangScore();  
    System.out.println(ZhangScorelist.size());  
    ZhangScore zhangScore= zhangScoreService.selectByPrimaryKey(29);  
    System.out.println(zhangScore.toString());  
    Map<String, Object> map2Json = new HashMap<String, Object>();  
    map2Json.put("aaData", ZhangScorelist);  
    return map2Json;  
}  

springmvc导出csv表格的RequestMapper

@RequestMapping("/export")  
public void exportcsv(HttpServletRequest request,HttpServletResponse response) throws Exception{  
     SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
     List exportData = new ArrayList<Map>();  
    List<ZhangScore> list=  zhangScoreService.selsectAllZhangScore();  
    if(list!=null){  
        for (ZhangScore d:list) {  
             Map<String, String> row = new LinkedHashMap<String, String>();  
             row.put("1", d.getUserId());  
             row.put("2", d.getUserName());  
             row.put("3", d.getFrist()+"");  
             row.put("4", d.getSecond()+"");  
             row.put("5", d.getThrid()+"");  
             row.put("6", d.getTotal()+"");  
             exportData.add(row);  
        }  
           LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();  
            map.put("1", "学号");  
            map.put("2", "姓名");  
            map.put("3", "章节得分");  
            map.put("4", "oj习题得分");  
            map.put("5", "智能达标测试得分");  
            String fileName=String.valueOf("信息"+new Date().getTime());  
            try {  
                response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName, "UTF-8")+".csv");  
                response.setContentType("application/csv");  
                //response.setContentType("application/x-msdownload");  txt  
                response.setCharacterEncoding("UTF-8");  
                String agent = request.getHeader("User-Agent");  
                boolean isMSIE = (agent != null && agent.indexOf("MSIE") != -1);  
                if( isMSIE ){  
                    fileName = URLEncoder.encode(fileName,"UTF8");  
                }else{  
                    fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");  
                }  
                //response.addHeader("Content-Length", "" + file.length());  
                response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开  
               // response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".txt");  
                  ExportCsvUtil.createCSVFile(exportData, map, response.getOutputStream());  
              //  ExportCsvUtil.createTxtFile("6901285991219\t1\r\n6928防护等级459\t1",response.getOutputStream());  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
    } 

创建csv类

public class ExportCsvUtil {
  public static File createCSVFile(List exportData, LinkedHashMap rowMapper,
      OutputStream out) {
    File csvFile = null;
    BufferedWriter csvFileOutputStream = null;
    try {
      // GB2312使正确读取分隔符","
      csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(
          out, "GB2312"), 1024 * 100);
      // 写入文件头部
      for (Iterator propertyIterator = rowMapper.entrySet().iterator(); propertyIterator
          .hasNext();) {
        Entry propertyEntry = (Entry) propertyIterator.next();
        csvFileOutputStream.write("\""
            + propertyEntry.getValue().toString() + "\"");
        if (propertyIterator.hasNext()) {
          csvFileOutputStream.write(",");
        }
      }
      csvFileOutputStream.newLine();
      // 写入文件内容
      for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
        // Object row = (Object) iterator.next();
        LinkedHashMap row = (LinkedHashMap) iterator.next();
        System.out.println(row);
        for (Iterator propertyIterator = row.entrySet().iterator(); propertyIterator
            .hasNext();) {
          Entry propertyEntry = (Entry) propertyIterator.next();
          // System.out.println( BeanUtils.getProperty(row,
          // propertyEntry.getKey().toString()));
          csvFileOutputStream.write("\""
              + propertyEntry.getValue().toString() + "\"");
          if (propertyIterator.hasNext()) {
            csvFileOutputStream.write(",");
          }
        }
        if (iterator.hasNext()) {
          csvFileOutputStream.newLine();
        }
      }
      csvFileOutputStream.flush();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        csvFileOutputStream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return csvFile;
  }

微信图片_20221210105326.png

前台通过js获取到选中的id,通过ajax就可以实现批量删除的功能。

微信图片_20221210105433.png

相关文章
|
12天前
|
前端开发
Bootstrap5 分页1
Bootstrap 5 提供了简单易用的分页组件。通过在 `&lt;ul&gt;` 元素上添加 `.pagination` 类,并在 `&lt;li&gt;` 元素上添加 `.page-item` 类,以及在 `&lt;a&gt;` 标签上添加 `.page-link` 类,即可实现基本的分页效果。使用 `.active` 类可以高亮显示当前页。
|
6月前
|
前端开发 JavaScript 数据处理
bootstrap实现分页(实例)
bootstrap实现分页(实例)
60 0
|
前端开发 程序员 Android开发
Bootstrap+jQuery实现卡片标签样式的分页
Bootstrap+jQuery实现卡片标签样式的分页
64 0
|
12天前
Bootstrap5 分页3
分页的对齐方式可以通过添加不同的类来实现,默认为左对齐,居中对齐需添加 `justify-content-center` 类,右对齐则添加 `justify-content-end` 类。面包屑导航通过 `.breadcrumb` 和 `.breadcrumb-item` 类进行设置,用于显示当前页面在网站中的位置。
|
8天前
|
前端开发 PHP
10 PHP结合bootstrap完成分页
路老师分享了如何使用PHP实现CSDN问答列表的分页功能。首先,通过编写 `index.php` 文件,定义数据和分页逻辑。接着,安装 Composer 并配置 PHP 包管理工具,以引入 `jasongrimes/paginator` 分页插件。最后,展示分页效果并确保代码路径正确。下篇将介绍 PHP 和 Web 页面的交互。
16 0
|
12天前
Bootstrap5 分页2
使用 `.disabled` 类可使分页链接不可点击。通过 `.pagination-lg` 和 `.pagination-sm` 类可调整分页条目的大小,分别设置为大字体和小字体。示例代码展示了如何实现这些效果。
|
3月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
前端开发
|
6月前
|
前端开发
Bootstrap 5 保姆级教程(七):分页 & 列表组
Bootstrap 5 保姆级教程(七):分页 & 列表组
|
6月前
|
Java 数据库 Maven
基于SSM框架疫情之下社区管理系统(spring+springmvc+mybatis+jsp+jquery+bootstrap)
基于SSM框架疫情之下社区管理系统(spring+springmvc+mybatis+jsp+jquery+bootstrap)