一、下载插件
链接地址: 下载地址,进入后直接点击下载源码即可。
二、导入jsp中
将源码包解压:将dist目录下的bootstrap-table.min.css和bootstrap-table.min.js,以及表格汉化dist/local目录下的
bootstrap-table-zh-CN.min.js文件导入项目。
jsp页面导入:<link rel="stylesheet" type="text/css" href="${basePath}/Css/bootstrap-table.min.css" /> <script type="text/javascript" src="${basePath}/Js/bootstrap-table.min.js"></script>
三、body
只有一个form表单用来添加查询条件,一个table用来装载填充数据。
<body> <form class="form-inline definewidth m20" action="" method="get"> <div class="form-group"> <label for="sysCode">系统编号:</label> <select name="sysCode" id="sysCode" class="form-control"> <option value="">所有</option> <option value="pms">PMS</option> <option value="cyt">畅游通</option> </select> <label for="channelCode">渠道名称:</label> <select name="channelCode" id="channelCode" class="form-control"> <option value="">所有</option> <option value="502">九寨沟</option> <option value="520">青都</option> </select><br><br> <%--用户ID:--%> <input type="text" name="userId" id="userId"class="abc input-default" placeholder="这里输入用户编号"> <%--请求路径:--%> <input type="text" name="reqUrl" id="reqUrl"class="abc input-default" placeholder="这里输入请求路径"> <%--会话ID:--%> <input type="text" name="sessionId" id="sessionId"class="abc input-default" placeholder="这里输入会话ID"> <button type="button" οnclick="reloadTable()" class="btn btn-primary">查询</button> </div> </form> <table id="table"></table> </body>
三、script或者说JS
这里就是来把数据填充到table里面的。属性意思可以去查看 官方文档,有很详细的说明,建议自己对着看,能学的深刻点,不容易忘。reloadTable方法里面是重新加载填充table。
<script> var oTableInit = new Object(); var $table = $('#table'); oTableInit.Init = $(function() { // bootstrap table初始化 $table.bootstrapTable({ method:"get", url: '${basePath}/optManage/findOptRecordList', //data:'${basePath}/data.json', queryParams:oTableInit.queryParams, striped: true, search: false, cache:false, dataType:'json', showRefresh: true, showColumns: true, showToggle:true, showPaginationSwitch:true, minimumCountColumns: 2, clickToSelect: true, detailView: true, // detailFormatter:'detailFormatter', detailFormatter: function(index, row) { var html = ''; $.each(row, function(key, val){ html += "<p class='text-info'>" + key + ":" + val +"</p>" }); return html; }, pagination: true, pageNumber:1, pageSize:10, paginationLoop: false, pageList: [10, 25, 50, 100], sidePagination: 'server', silentSort: false, smartDisplay: false, escape: true, idField: 'id', /* sortName: 'channelName', sortOrder: 'desc',*/ maintainSelected: true, toolbar: '#toolbar', columns: [ {field: 'id', title:'编号',align:'center'}, {field: 'sysCode', title: '系统编号',align:'center'}, {field: 'channelCode', title: '渠道编号',visible: false,align:'center'}, {field: 'channelName', title: '渠道名称',align:'center'}, {field: 'terminalName', title: '终端',align:'center'}, {field: 'sessionId', title: '会话id',align:'center'}, {field: 'reqParams', title: '请求参数',align:'center'}, {field: 'reqUrl', title: '请求URL',align:'center'}, {field: 'userId', title: '用户编号',align:'center'}, {field: 'sceneNo', title: '场景号',visible: false,align:'center'}, {field: 'reqMethodName', title: '请求动作',align:'center'}, {field: 'optBrief', title: '操作简介',align:'center'}, {field: 'optTime', title: '操作时间',align:'center'}, {field: 'optDescription', title: '操作描述',visible: false,align:'center'}, {field: 'ip', title: 'IP',align:'center'}, {field: 'clientIp', title: 'clientIP',visible: false,align:'center'}, {field: 'mac', title: '物理地址',visible: false,align:'center'}, {field: 'imei', title: 'imei',visible: false,align:'center'}, {field: 'operators', title: '操作用户',visible: false,align:'center'}, {field: 'manufacturer', title: '提供商',visible: false,align:'center'}, {field: 'phoneModel', title: '手机类型',align:'center'}, {field: 'computerName', title: '电脑名称',align:'center'}, {field: 'os', title: '操作系统',align:'center'}, {field: 'osVersion', title: '操作系统版本',align:'center'}, {field: 'resolution', title: '布局',visible: false,align:'center'}, {field: 'font', title: '字体',visible: false,align:'center'}, {field: 'fontSize', title: '字体大小',visible: false,align:'center'}, {field: 'browser', title: '浏览器',align:'center'}, {field: 'browserVersion', title: '浏览器版本',align:'center'}, {field: 'appName', title: 'app名称',visible: false,align:'center'}, {field: 'appType', title: 'app类型',visible: false,align:'center'}, {field: 'appVersion', title: 'app版本',visible: false,align:'center'}, {field: 'longitude', title: '经度',visible: false,align:'center'}, {field: 'latitude', title: '纬度',visible: false,align:'center'}, {field: 'internetType', title: '网络类型',visible: false,align:'center'}, {field: 'isEmulator', title: '是否支持虚拟机',visible: false,align:'center'}, {field: 'deviceId', title: '设备编号',visible: false,align:'center'} ] }); }); oTableInit.queryParams = function (params) { var temp = { //这里的键的名字和控制器的变量名必须一致 limit: params.limit, //页面大小 offset: params.offset, //页码 sysCode: $("#sysCode").val(), channelCode: $("#channelCode").val(), //terminalName: $("#terminalName").val(), //sceneNo: $("#sceneNo").val(), userId: $("#userId").val(), sessionId: $("#sessionId").val(), reqUrl: $("#reqUrl").val() }; return temp; }; function reloadTable() { $table.bootstrapTable('refresh'); } </script>
四、后台控制层
查询数据库得到需要展示的数据。
PageInfo实体类(分页对象),应该不用注释了,见名思意就行了。@ResponseBody @RequestMapping(value = "/findOptRecordList",method = RequestMethod.GET) public Object findOptRecordList(Integer offset,Integer limit,String order,String userId,String sysCode,String channelCode,String channelName,String terminalName,String sessionId,String reqUrl,String sceneNo) { int pageNo = 1; if(offset != null) { pageNo = (offset/limit +1); } PageInfo<OptRecordAndEnvVO> pageInfo = optManageService.findOptRecordAndEnvListPage(pageNo,limit,userId,sysCode,channelCode,channelName,terminalName,sessionId,reqUrl,sceneNo); Map<String,Object> resultMap = new HashMap<>(); resultMap.put("rows",pageInfo.getList()); resultMap.put("total",pageInfo.getTotal()); return resultMap; }
加一段service的代码...package com.github.pagehelper; import com.github.pagehelper.Page; import java.io.Serializable; import java.util.Collection; import java.util.List; public class PageInfo<T> implements Serializable { private static final long serialVersionUID = 1L; private int pageNum; private int pageSize; private int size; private int startRow; private int endRow; private long total; private int pages; private List<T> list; private int prePage; private int nextPage; private boolean isFirstPage; private boolean isLastPage; private boolean hasPreviousPage; private boolean hasNextPage; private int navigatePages; private int[] navigatepageNums; private int navigateFirstPage; private int navigateLastPage; public PageInfo() { this.isFirstPage = false; this.isLastPage = false; this.hasPreviousPage = false; this.hasNextPage = false; } public PageInfo(List<T> list) { this(list, 8); } public PageInfo(List<T> list, int navigatePages) { this.isFirstPage = false; this.isLastPage = false; this.hasPreviousPage = false; this.hasNextPage = false; if(list instanceof Page) { Page page = (Page)list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.pages = page.getPages(); this.list = page; this.size = page.size(); this.total = page.getTotal(); if(this.size == 0) { this.startRow = 0; this.endRow = 0; } else { this.startRow = page.getStartRow() + 1; this.endRow = this.startRow - 1 + this.size; } } else if(list instanceof Collection) { this.pageNum = 1; this.pageSize = list.size(); this.pages = 1; this.list = list; this.size = list.size(); this.total = (long)list.size(); this.startRow = 0; this.endRow = list.size() > 0?list.size() - 1:0; } if(list instanceof Collection) { this.navigatePages = navigatePages; this.calcNavigatepageNums(); this.calcPage(); this.judgePageBoudary(); } } private void calcNavigatepageNums() { int startNum; if(this.pages <= this.navigatePages) { this.navigatepageNums = new int[this.pages]; for(startNum = 0; startNum < this.pages; ++startNum) { this.navigatepageNums[startNum] = startNum + 1; } } else { this.navigatepageNums = new int[this.navigatePages]; startNum = this.pageNum - this.navigatePages / 2; int endNum = this.pageNum + this.navigatePages / 2; int i; if(startNum < 1) { startNum = 1; for(i = 0; i < this.navigatePages; ++i) { this.navigatepageNums[i] = startNum++; } } else if(endNum > this.pages) { endNum = this.pages; for(i = this.navigatePages - 1; i >= 0; --i) { this.navigatepageNums[i] = endNum--; } } else { for(i = 0; i < this.navigatePages; ++i) { this.navigatepageNums[i] = startNum++; } } } } private void calcPage() { if(this.navigatepageNums != null && this.navigatepageNums.length > 0) { this.navigateFirstPage = this.navigatepageNums[0]; this.navigateLastPage = this.navigatepageNums[this.navigatepageNums.length - 1]; if(this.pageNum > 1) { this.prePage = this.pageNum - 1; } if(this.pageNum < this.pages) { this.nextPage = this.pageNum + 1; } } } private void judgePageBoudary() { this.isFirstPage = this.pageNum == 1; this.isLastPage = this.pageNum == this.pages; this.hasPreviousPage = this.pageNum > 1; this.hasNextPage = this.pageNum < this.pages; } public int getPageNum() { return this.pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return this.pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getSize() { return this.size; } public void setSize(int size) { this.size = size; } public int getStartRow() { return this.startRow; } public void setStartRow(int startRow) { this.startRow = startRow; } public int getEndRow() { return this.endRow; } public void setEndRow(int endRow) { this.endRow = endRow; } public long getTotal() { return this.total; } public void setTotal(long total) { this.total = total; } public int getPages() { return this.pages; } public void setPages(int pages) { this.pages = pages; } public List<T> getList() { return this.list; } public void setList(List<T> list) { this.list = list; } /** @deprecated */ @Deprecated public int getFirstPage() { return this.navigateFirstPage; } /** @deprecated */ @Deprecated public void setFirstPage(int firstPage) { this.navigateFirstPage = firstPage; } public int getPrePage() { return this.prePage; } public void setPrePage(int prePage) { this.prePage = prePage; } public int getNextPage() { return this.nextPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } /** @deprecated */ @Deprecated public int getLastPage() { return this.navigateLastPage; } /** @deprecated */ @Deprecated public void setLastPage(int lastPage) { this.navigateLastPage = lastPage; } public boolean isIsFirstPage() { return this.isFirstPage; } public void setIsFirstPage(boolean isFirstPage) { this.isFirstPage = isFirstPage; } public boolean isIsLastPage() { return this.isLastPage; } public void setIsLastPage(boolean isLastPage) { this.isLastPage = isLastPage; } public boolean isHasPreviousPage() { return this.hasPreviousPage; } public void setHasPreviousPage(boolean hasPreviousPage) { this.hasPreviousPage = hasPreviousPage; } public boolean isHasNextPage() { return this.hasNextPage; } public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } public int getNavigatePages() { return this.navigatePages; } public void setNavigatePages(int navigatePages) { this.navigatePages = navigatePages; } public int[] getNavigatepageNums() { return this.navigatepageNums; } public void setNavigatepageNums(int[] navigatepageNums) { this.navigatepageNums = navigatepageNums; } public int getNavigateFirstPage() { return this.navigateFirstPage; } public int getNavigateLastPage() { return this.navigateLastPage; } public void setNavigateFirstPage(int navigateFirstPage) { this.navigateFirstPage = navigateFirstPage; } public void setNavigateLastPage(int navigateLastPage) { this.navigateLastPage = navigateLastPage; } public String toString() { StringBuffer sb = new StringBuffer("PageInfo{"); sb.append("pageNum=").append(this.pageNum); sb.append(", pageSize=").append(this.pageSize); sb.append(", size=").append(this.size); sb.append(", startRow=").append(this.startRow); sb.append(", endRow=").append(this.endRow); sb.append(", total=").append(this.total); sb.append(", pages=").append(this.pages); sb.append(", list=").append(this.list); sb.append(", prePage=").append(this.prePage); sb.append(", nextPage=").append(this.nextPage); sb.append(", isFirstPage=").append(this.isFirstPage); sb.append(", isLastPage=").append(this.isLastPage); sb.append(", hasPreviousPage=").append(this.hasPreviousPage); sb.append(", hasNextPage=").append(this.hasNextPage); sb.append(", navigatePages=").append(this.navigatePages); sb.append(", navigateFirstPage").append(this.navigateFirstPage); sb.append(", navigateLastPage").append(this.navigateLastPage); sb.append(", navigatepageNums="); if(this.navigatepageNums == null) { sb.append("null"); } else { sb.append('['); for(int i = 0; i < this.navigatepageNums.length; ++i) { sb.append(i == 0?"":", ").append(this.navigatepageNums[i]); } sb.append(']'); } sb.append('}'); return sb.toString(); } }
以上就是完整的实现了。最后附上一张展示效果图:public PageInfo<OptRecordAndEnvVO> findOptRecordAndEnvListPage(Integer pageNo, Integer pageSize, String userId, String sysCode, String channelCode,String channelName, String terminalName, String sessionId, String reqUrl, String sceneNo) { List<OptRecordAndEnvVO> list = optRecordAndEnvDAO.findOptRecordListPage(pageNo,pageSize,userId,sysCode,channelCode,channelName, terminalName,sessionId,reqUrl,sceneNo); return new PageInfo<>(list); }