使用bootstrap Table

bootstrap Table是一个基于ajax异步获取数据的插件 可以实现查询分页等多种功能
本文博主将从零开始,一步一步的告诉大家如何在前端用bootstrap Table插件

官方下载地址:https://bootstrap-table.wenzhixin.net.cn/docs/getting-started/download/
首先在jsp页面添加对插件的引用

<!-- 引入bootstrap-table样式 -->
<link href="bootstrap-table/css/bootstrap-table.min.css"
	rel="stylesheet">
<!-- jquery -->
<script src="bootstrap-table/js/jquery.min.js"></script>
<script src="bootstrap-table/js/bootstrap-table.min.js"></script>
<!-- 引入中文语言包 -->
<script src="bootstrap-table/js/bootstrap-table-zh-CN.min.js"></script>

然后再jsp页面添加表格要显示的位置以及查询条件

<div id="query">
			<span>用户姓名:</span> <input type="text" id="name" name="name"
				autocomplete="off" placeholder="请输入用户姓名">
			<button id="queryBtn" onclick="query()">查询</button>
		</div>
<table id="table" data-toolbar="#toolbar"></table>

然后编写js

<script type="text/javascript">
//有些地方添加中文语言包还是会出现乱码情况 所以在这里直接编辑要显示的文本内容
$(function () {
		$.fn.bootstrapTable.locales['zh-CN'] = {
		        formatLoadingMessage: function () {
		            return '正在努力地加载数据中,请稍候……';
		        },
		        formatRecordsPerPage: function (pageNumber) {
		            return '每页显示 ' + pageNumber + ' 条记录';
		        },
		        formatShowingRows: function (pageFrom, pageTo, totalRows) {
		            return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录';
		        },
		        formatSearch: function () {
		            return '搜索';
		        },
		        formatNoMatches: function () {
		            return '没有找到匹配的记录';
		        },
		        formatPaginationSwitch: function () {
		            return '隐藏/显示分页';
		        },
		        formatRefresh: function () {
		            return '刷新';
		        },
		        formatToggle: function () {
		            return '切换';
		        },
		        formatColumns: function () {
		            return '列';
		        },
		        formatExport: function () {
		            return '导出数据';
		        },
		        formatClearFilters: function () {
		            return '清空过滤';
		        }
		    };
		    $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);
		    //1.初始化Table
	    var oTable = new initTable();
	 });
	 
	 function query(){
		//刷新表格
		$('#table').bootstrapTable('refresh');
	}
	/*
		实现回车键 触发查询按钮
	*/
	$("body").keydown(function() {
		if (event.keyCode == "13") {//keyCode=13是回车键
			$('#queryBtn').click();
		}
	});
	 //初始化bootstrap-table的内容
	function initTable () {
	    //记录页面bootstrap-table全局变量$table,方便应用
	    $table = $('#table').bootstrapTable({
	        url: "url",                      //请求后台的URL(*)
	        method: 'POST',                      //请求方式(*)
	        contentType: "application/x-www-form-urlencoded",//post请求的话就加上这个句话
	        //toolbar: '#toolbar',              //工具按钮用哪个容器
	        striped: true,                      //是否显示行间隔色
	        cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
	        pagination: true,                   //是否显示分页(*)
	        sortable: true,                     //是否启用排序
	        sortOrder: "asc",                   //排序方式
	        queryParams : initTable.queryParams,// 传递参数(*)
	        sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
	        pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
	        pageSize: 10,                     //每页的记录行数(*)
	        pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
	        paginationPreText: '‹',//指定分页条中上一页按钮的图标或文字,这里是<
	        paginationNextText: '›',//指定分页条中下一页按钮的图标或文字,这里是>
	        search: false,                      //是否显示表格搜索
	        strictSearch: true,
	        //buttonsAlign:"left",				//按钮显示的位置
	        showRefresh: true,                  //是否显示刷新按钮
	        showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
	        //showColumns: true,                  //是否显示所有的列(选择显示的列)
	        //minimumCountColumns: 2,             //最少允许的列数
	        cardView: false,                    //是否显示详细视图
	        detailView: false,                  //是否显示父子表
	        clickToSelect: true,                //是否启用点击选中行
	        //height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
	        uniqueId: "id",                     //每一行的唯一标识,一般为主键列
	      //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder  
	        //设置为limit可以获取limit, offset, search, sort, order 
	        "queryParamsType":'limit',
	        //得到查询的参数
	        queryParams : function (params) { 
	            //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
	            var temp = {   
	                rows: params.limit,                     // 每页显示数量
	                page: (params.offset / params.limit) + 1,   //页码 
	                product_id:$("#product_id").val(),
	                name: $("#name").val()//传递查询的参数
	                //sort: params.sort,      //排序列名   
	                //sortOrder: params.order //排位命令(desc,asc) 
	            };
	            return temp;
	        },
	        columns: [{
	            checkbox: true, // 显示一个勾选框
	            align: 'center' // 居中显示
	        },{
	        	field: 'name', //对应后台传递的属性名
	            title: '姓名',//表格要显示的第一行文本
	            align: 'center',//文本居中
	            valign: 'middle'
	        },{
	        	field: 'product_id', 
	            title: '产品名称',
	            align: 'center',
	            valign: 'middle',
	            formatter: function (value, row, index) {//根据传递的参数来进行更改
	            	switch (value) {
					case 1:
						return "产品1";
						break;
					case 2:
						return "产品2";
						break;
					default:return "产品异常";
					}
	            } 
	        }
		 ]
	    });
	};
</script>

前端页面编写完毕,下面编写后台java传递数据的格式
首先运用表格分页工具类 对传递的数据进行封装

/**
 * 表格分页工具类
 * @author Administrator
 *
 */
public class PageTable {
	
	private Integer currentPage;//当前页
    private int limit;//每页显示记录条数
    private int totalPage;//总页数
    private List<?> dataList;//每页显示的数据
    private int offset;//开始数据

    public Integer getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }
 
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public List<?> getDataList() {
        return dataList;
    }
    public void setDataList(List<?> dataList) {
        this.dataList = dataList;
    }
	public int getLimit() {
		return limit;
	}
	public void setLimit(int limit) {
		this.limit = limit;
	}
	public int getOffset() {
		return offset;
	}
	public void setOffset(int offset) {
		this.offset = offset;
	}
}

然后再controller类 编写接口对应表格请求的地址

package com.gm.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.gm.util.PageTable;
import com.google.gson.Gson;

/**
 * bootstrap table表格
 * 
 * @author Administrator
 *
 */
@Controller
public class TestController {

	@RequestMapping("url")
	public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {
		// 设置从request中取得的值或从数据库中取出的值的编码格式
		request.setCharacterEncoding("UTF-8");
		// 设置从response中取得的值或从数据库中取出的值的编码格式
		response.setContentType("text/html;charset=utf-8");

		// 获取bootstrap table 的rows参数
		String limit = request.getParameter("rows");
		// 获取bootstrap table 的page参数
		String pageSize = request.getParameter("page");

		// 获取查询条件的name
		String name = request.getParameter("name");

		// sql语句从数据库查询数据
		List list = new ArrayList<>();// 从数据库获取的数据 存放到list中
		PageTable page = new PageTable();
		// 设置第几页
		page.setCurrentPage(Integer.parseInt(pageSize));
		// 刚开始的页面为第一页
		if (page.getCurrentPage() == null) {
			page.setCurrentPage(1);
		} else {
			page.setCurrentPage(page.getCurrentPage());
		}
		// 设置每页数据为十条
		page.setLimit(Integer.parseInt(limit));
		// 每页的开始数
		page.setOffset((page.getCurrentPage() - 1) * page.getLimit());
		// list的大小
		int count = list.size();
		// 设置总页数
		page.setTotalPage(count % 10 == 0 ? count / 10 : count / 10 + 1);
		// 对list进行截取
		page.setDataList(list.subList(page.getOffset(),
				count - page.getOffset() > page.getLimit() ? page.getOffset() + page.getLimit() : count));
		list = (List) page.getDataList();

		Map<String, Object> map = new HashMap<>();
		if (list != null) {
			map.put("total", count);
			map.put("rows", list);
		}
		Gson gson = new Gson();
		String json = gson.toJson(map);
		PrintWriter out = null;
		out = response.getWriter();
		out.print(json);
		out.close();
	}
}

好了代码编写完成!吃饭了。

猜你喜欢

转载自blog.csdn.net/lady132/article/details/86521960