1. 程式人生 > >SpringBoot+BootStrapTable+PageHelper使用者新增,刪除,修改

SpringBoot+BootStrapTable+PageHelper使用者新增,刪除,修改

擼完程式碼,成功執行的那一刻,激動、興奮、高興地點了個外賣,,琢磨著要記錄下來遇到的坑,但是突然發現。不知道該寫什麼了。。那就先寫幾個記憶比較深刻的坑,記錄下來提醒自己,以及幫助遇到同樣問題的旁友

前面已經配置好其他環境,現在就是在iframe中使用BootStrapTable

使用者管理頁面:增加,批量刪除,修改,分頁,修改是使用模態框獲取一行資料

爬爬遇到的坑

1、使用BootStrapTable傳遞到後臺時,分頁時,queryParam方法傳遞pageNumber和pageSize傳遞到後臺死活傳不過去,找了好久,

method:"POST",
//極為重要,缺失無法執行queryParams,傳遞page引數
contentType : "application/x-www-form-urlencoded",
dataType:"json",
url:'/user/pageInfo', 
queryParams:queryParam,
pagination:true,//顯示分頁條:頁碼,條數等
striped:true,//隔行變色
pageNumber:1,//首頁頁碼
pageSize:10,//分頁,頁面資料條數
加上這句
contentType : "application/x-www-form-urlencoded",
就搞定了,這是我的情況。。

2、BootStrapTable獲取一個表單中填入的值

var param = $("#addUserForm").serializeArray();
BootStrapTable獲取選中一行資料
var rows = $("#dataGrid").bootstrapTable('getSelections');
3、獲取選中一行的資料到模態框中

//獲取選中行的資料
		var rows = $("#dataGrid").bootstrapTable('getSelections');
		if(rows.length!=1){
			document.getElementById("tipContent").innerText="請選擇一行資料";
			$("#Tip").modal('show');
		}
		else{
		var row = rows[0];
		$('#editId').val(row.id);
		$('#editAccount').val(row.account);
		$('#editPassword').val(row.password);
		$('#editName').val(row.name);
		$('#editSex').val(row.sex);
		$('#editEmail').val(row.email);
		$('#editPhone').val(row.phone);
		$('#editStates').val(row.states);
		$('#editCreated_at').val(row.created_at);
		$("#editModal").modal("show");
		}
#editId是模態框裡面input的id,row.id中的id是模態框一個input中的name屬性。
4、後臺傳遞從資料庫查到的資料需要轉為json
	List<User> users =userService.getUserList();
int total = users.size();
PageHelper.startPage(pageNumber,pageSize);
List<User> pageInfo=userService.getUserList();
JSONObject result = new JSONObject();
result.put("rows",pageInfo);
result.put("total",total);
System.out.println(result.toJSONString());
return result.toJSONString();
匯入import com.alibaba.fastjson.JSONObject;

5、批量刪除無非存入多個id,到後臺迴圈呼叫刪除。

function deleteUser(){
		var rows = $("#dataGrid").bootstrapTable("getSelections");
		var ids = [];
		var len = rows.length;
		debugger;
		for(var i=0;i<len;i++){
			ids.push(rows[i].id);
		}
		debugger;
		$.ajax({
			url:"/user/deleteUser",
			dataType:"json",
			traditional: true,//屬性在這裡設定
			method:"post",
			data:{
				"ids":ids
			},
			success:function(data){
				document.getElementById("tipContent").innerText="刪除成功";
				$("#Tip").modal('show');
				$("#dataGrid").bootstrapTable("refresh");
			},
			error:function(){
				document.getElementById("tipContent").innerText="刪除失敗";
				$("#Tip").modal('show');
			}
		});
	}
後臺獲取ajax傳的陣列

String[] list=request.getParameterValues("ids");

6、SpringBoot中templates使用thymeleaf時,<,>都報錯,使用了&lt;,用了for,最後還是放到了別的包下面。這樣在html裡面就不會使用<,>

就記得這麼些了。。

貼程式碼:index.html

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head th:include="back/header">
<title>Insert title here</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>
<body>
		<section class="content-header">
		<h1>使用者管理</h1>
		</section>
		<section class="content table-content">
			<form class="form-inline" >
			<!-- 工具欄 -->
			<div id="toolbar">
					<input type="button" value="新增使用者" id="addBtn" data-toggle="modal" data-target="#addUserModal" class="btn btn-primary"></input>
					<input type="button" value="修改使用者" id="editBtn" data-toggle="modal" data-target="#editUserModal" class="btn btn-primary" onclick="editUser()"></input>
					<input type="button" value="刪除使用者" id="deleteBtn" data-toggle="modal" data-target="#deleteUserModal" class="btn btn-primary" onclick="deleteUser()"></input>
			</div>
			<!-- bootstrapTable -->
			</form>
			<table id="dataGrid">
			</table>
		</section>
		<!-- 新增使用者的模態框,在修改使用者中將獲取一行的值放入input中,改變一些引數繼續使用 -->
		<div class="modal fade" id="addUserModal" tabindex="-1" role="dialog">
			<div class="modal-dialog" role="document">
				<div class="modal-content">
					<div class="modal-header">
						<h3>新增使用者</h3>
					</div>
					<div class="modal-body">
						<form id="addUserForm" action="/user/addUser" method="post" class="form-horizontal">
							<div class="form-group">
								<label for="inputAccount" class="col-sm-2 control-label">賬戶</label>
								<div class="col-sm-7">
									<input type="account" name="account" class="form-control" id="inputAccount" placeholder="賬戶"/>
								</div>
								<label id="errorAccount" for="inputAccount" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group" >
								<label for="inputPassword" class="col-sm-2 control-label">密碼</label>
								<div class="col-sm-7">
									<input type="text" name="password" class="form-control" id="inputPassword" placeholder="密碼"/>
								</div>
								<label id="errorPassword" for="inputPassword" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputName" class="col-sm-2 control-label">姓名</label>
								<div class="col-sm-7">
									<input type="name" name="name" class="col-sm-4 form-control" id="inputName" placeholder="姓名"/>
								</div>
								<label id="errorName" for="inputName" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputSex" class="col-sm-2 control-label">性別</label>
								<div class="col-sm-7">
									<input type="sex" name="sex" class="col-sm-4 form-control" id="inputSex" placeholder="性別"/>
								</div>
								<label id="errorSex" for="inputSex" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputPhone" class="col-sm-2 control-label">手機</label>
								<div class="col-sm-7">
									<input type="phone" name="phone" class="col-sm-4 form-control" id="inputPhone" placeholder="手機"/>
								</div>
								<label id="errorPhone" for="inputPhone" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputEmail" class="col-sm-2 control-label">郵箱</label>
								<div class="col-sm-7">
									<input type="email" name="email" class="col-sm-4 form-control" id="inputEmail" placeholder="郵箱"/>
								</div>
								<label id="errorEmail" for="inputEmail" class="col-sm-3 control-label"></label>
							</div>
						</form>
					</div>
					<div class="modal-footer">
						<button type="button" id="conf" class="btn btn-default" onclick="addUser()">確定</button>
						<button type="button" class="btn btn-default" data-dismiss="modal" onclick="resetAddModal()">取消</button>
					</div>
				</div>				
			</div>
		</div>
		<!-- 修改使用者的模態框 -->
		<div class="modal fade" id="editModal" tabindex="-1" role="dialog">
			<div class="modal-dialog" role="document">
				<div class="modal-content">
					<div class="modal-header">
						<h3>修改使用者</h3>
					</div>
					<div class="modal-body">
						<form id="editForm" method="post" class="form-horizontal">
							<div class="form-group" style="display:none">
								<label for="editId" class="col-sm-2 control-label">ID</label>
								<div class="col-sm-7">
									<input type="id" name="id"   class="form-control" id="editId" placeholder="ID" />
								</div>
								<label id="errorId" for="editId" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputAccount" class="col-sm-2 control-label">賬戶</label>
								<div class="col-sm-7">
									<input type="account" name="account" class="form-control" id="editAccount" placeholder="賬戶"/>
								</div>
								<label id="errorAccount" for="inputAccount" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group" >
								<label for="inputPassword" class="col-sm-2 control-label">密碼</label>
								<div class="col-sm-7">
									<input type="text" name="password" class="form-control" id="editPassword" placeholder="密碼"/>
								</div>
								<label id="errorPassword" for="inputPassword" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputName" class="col-sm-2 control-label">姓名</label>
								<div class="col-sm-7">
									<input type="name" name="name" class="col-sm-4 form-control" id="editName" placeholder="姓名"/>
								</div>
								<label id="errorName" for="inputName" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputSex" class="col-sm-2 control-label">性別</label>
								<div class="col-sm-7">
									<input type="sex" name="sex" class="col-sm-4 form-control" id="editSex" placeholder="性別"/>
								</div>
								<label id="errorSex" for="inputSex" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputPhone" class="col-sm-2 control-label">手機</label>
								<div class="col-sm-7">
									<input type="phone" name="phone" class="col-sm-4 form-control" id="editPhone" placeholder="手機"/>
								</div>
								<label id="errorPhone" for="inputPhone" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputEmail" class="col-sm-2 control-label">郵箱</label>
								<div class="col-sm-7">
									<input type="email" name="email" class="col-sm-4 form-control" id="editEmail" placeholder="郵箱"/>
								</div>
								<label id="errorEmail" for="inputEmail" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group">
								<label for="inputStates" class="col-sm-2 control-label">狀態</label>
								<div class="col-sm-7">
									<input type="states" name="states" class="col-sm-4 form-control" id="editStates" placeholder="狀態"/>
								</div>
								<label id="errorStates" for="inputStates" class="col-sm-3 control-label"></label>
							</div>
							<div class="form-group" style="display:none">
								<label for="inputCreated_at" class="col-sm-2 control-label">建立時間</label>
								<div class="col-sm-7">
									<input type="created_at" name="created_at" class="col-sm-4 form-control" id="editCreated_at" placeholder="建立時間" />
								</div>
								<label id="errorCreated_at" for="inputCreated_at" class="col-sm-3 control-label"></label>
							</div>
						</form>
					</div>
					<div class="modal-footer">
						<button type="button" id="conf" class="btn btn-default" onclick="updateUser()">確定</button>
						<button type="button" class="btn btn-default" data-dismiss="modal" onclick="resetAddModal()">取消</button>
					</div>
				</div>				
			</div>
		</div>
		<div class="modal fade" id="Tip" role="dialog">
			<div class="modal-dialog" role="document">
				<div class="modal-content">
					<div class="modal-header">
						<h3>提示</h3>
					</div>
					<div class="modal-body" align="center">
						<h4 id="tipContent">新增成功</h4>
					</div>
					<div class="modal-footer">
						<button type="button" class="btn btn-default" data-dismiss="modal">確定</button>
					</div>
				</div>
			</div>
		</div>
		<div class="modal fade" id="updateEnd" role="dialog">
			<div class="modal-dialog" role="document">
				<div class="modal-content">
					<div class="modal-header">
						<h3>提示</h3>
					</div>
					<div class="modal-body" align="center">
						<h4 id="al">修改成功</h4>
					</div>
					<div class="modal-footer">
						<button type="button" class="btn btn-default" data-dismiss="modal">確定</button>
					</div>
				</div>
			</div>
		</div>
		<div th:include="back/footer"></div>
</body>
<script type="text/javascript">
	$(function() {
		//初始載入
		initDataGrid();
	});
	function initDataGrid() {
		//建立bootstrapTable
		$("#dataGrid").bootstrapTable({
			method:"POST",
			//極為重要,缺失無法執行queryParams,傳遞page引數
			contentType : "application/x-www-form-urlencoded",
			dataType:"json",
			url:'/user/pageInfo', 
			queryParams:queryParam,
			pagination:true,//顯示分頁條:頁碼,條數等
			striped:true,//隔行變色
			pageNumber:1,//首頁頁碼
			pageSize:10,//分頁,頁面資料條數
			uniqueId:"id",//Indicate an unique identifier for each row
			sidePagination:"server",//在伺服器分頁
			height:tableModel.getHeight(),
			toolbar:"#toolbar",//工具欄
			columns : [{
				checkbox:"true",
				field : "box"
			},  {
				title : "ID",
				field : "id",
				visible: false
			}, {
				title : "賬戶",
				field : "account"
			}, {
				title : "密碼",
				field : "password"
			}, {
				title : "姓名",
				field : "name"
			}, {
				title : "性別",
				field : "sex"
			}, {
				title : "手機",
				field : "phone"
			}, {
				title : "郵箱",
				field : "email"
			}, {
				title : "狀態",
				field : "states"
			}, {
				title : "建立時間",
				field : "created_at",
				sortable : true
			}],
			search : true,//搜尋
            searchOnEnterKey : true,
			showRefresh : true,//重新整理
            showToggle : true//

		});
	}
	function queryParam(params){
    	var param = {
    			limit : this.limit, // 頁面大小
    	        offset : this.offset, // 頁碼
    	        pageNumber : this.pageNumber,
    	        pageSize : this.pageSize
    	};
    	return param;
    }
	//點選取消後清空表單中已寫資訊
	function resetAddModal(){
		document.getElementById("addUserForm").reset();
	}
	//新增使用者
	function addUser(){
		var param = $("#addUserForm").serializeArray();
		debugger;
		$("#conf").attr("onclick","addUser()");
		$.ajax({
			url:"/user/addUser",
			method:"post",
			data:param,
			dataType:"json",
			success:function(data){
				if(data.state=="success"){
					document.getElementById("al").innerText="新增成功";
					$("#addEnd").modal('show');
					$("#addUserModal").modal('hide');
					$("#dataGrid").bootstrapTable('refresh');
				}
			},
			error:function(){
				document.getElementById("al").innerText="新增失敗";
				$("#addEnd").modal('show');
			}
		});
	}
	//修改使用者
	function editUser(){
		//獲取選中行的資料
		var rows = $("#dataGrid").bootstrapTable('getSelections');
		if(rows.length!=1){
			document.getElementById("tipContent").innerText="請選擇一行資料";
			$("#Tip").modal('show');
		}
		else{
		var row = rows[0];
		$('#editId').val(row.id);
		$('#editAccount').val(row.account);
		$('#editPassword').val(row.password);
		$('#editName').val(row.name);
		$('#editSex').val(row.sex);
		$('#editEmail').val(row.email);
		$('#editPhone').val(row.phone);
		$('#editStates').val(row.states);
		$('#editCreated_at').val(row.created_at);
		$("#editModal").modal("show");
		}
	}
	function updateUser(){
		var param = $("#editForm").serializeArray();
		//設為disable則無法獲取
		$.ajax({
			url:"/user/updateUser",
			method:"post",
			data:param,
			dataType:"json",
			success:function(data){
				if(data.state=="success"){
					$("#editModal").modal("hide");
					document.getElementById("tipContent").innerText="修改成功";
					$("#Tip").modal('show');
				}
			},
			error:function(data){
				alert("wrong");
			}
		});
	}
</script>
</html>
引入user.js
/**
 * 
 */
function deleteUser(){
		var rows = $("#dataGrid").bootstrapTable("getSelections");
		var ids = [];
		var len = rows.length;
		debugger;
		for(var i=0;i<len;i++){
			ids.push(rows[i].id);
		}
		debugger;
		$.ajax({
			url:"/user/deleteUser",
			dataType:"json",
			traditional: true,//屬性在這裡設定
			method:"post",
			data:{
				"ids":ids
			},
			success:function(data){
				document.getElementById("tipContent").innerText="刪除成功";
				$("#Tip").modal('show');
				$("#dataGrid").bootstrapTable("refresh");
			},
			error:function(){
				document.getElementById("tipContent").innerText="刪除失敗";
				$("#Tip").modal('show');
			}
		});
	}
後臺Controller
package com.damionew.website.controller.back;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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

import com.alibaba.fastjson.JSONObject;
import com.damionew.website.model.back.User;
import com.damionew.website.service.back.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.pagehelper.PageHelper;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/insert")
    public void insert(User user) {
	System.out.println("before");
	userService.addUser(user);
	System.out.println("after");
    }
    @RequestMapping("/index")
    public String index(User user) {
	return "back/user/index";
    }
    @ResponseBody
    @RequestMapping(value="getUser",produces="html/text;charset=UTF-8")
    public  String queryUserList() {
	List<User> users =userService.getUserList();
	System.out.println();
	JSONObject result = new JSONObject();
	result.put("rows", users);
	System.out.println(result.toJSONString());
	return result.toJSONString();
    }
    @ResponseBody
    @RequestMapping(value="pageInfo",produces="html/text;charset=UTF-8")
    public  String pageInfo(@RequestParam int pageNumber,int pageSize,HttpServletResponse response) {
    response.setContentType("text/json");
    response.setCharacterEncoding("utf-8");
	List<User> users =userService.getUserList();
	int total = users.size();
	PageHelper.startPage(pageNumber,pageSize);
	List<User> pageInfo=userService.getUserList();
	JSONObject result = new JSONObject();
	result.put("rows",pageInfo);
	result.put("total",total);
	System.out.println(result.toJSONString());
	return result.toJSONString();
    }
    @ResponseBody
    @RequestMapping("/addUser")
    public String addUser(User user) {
	Date date = new Date();
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
	String time = dateFormat.format(date);
	user.setCreated_at(time);
	user.setStates("1");
	System.out.println(user.getName());
	userService.addUser(user);
	System.out.println("success");
	JSONObject result = new JSONObject();
	result.put("state", "success");
	return result.toJSONString();
    }
    @ResponseBody
    @RequestMapping("/updateUser")
    public String updateUser(User user) {
	userService.updateUser(user);
	JSONObject result = new JSONObject();
	result.put("state", "success");
	return result.toJSONString();
    }
    @ResponseBody
    @RequestMapping("/deleteUser")
    public String deleteUser(HttpServletRequest request) {
	String[] list=request.getParameterValues("ids");
	System.out.println(list);
	for (int i = 0; i < list.length; i++) {
	    String id = list[i];
	    System.out.println(id);
	    userService.deleteUser(id);
	    
	}
	
	JSONObject result = new JSONObject();
	result.put("state", "success");
	return result.toJSONString();
    }
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.damionew.website.dao.back.UserDao">
	<select id="insert"  parameterType="string" resultType="User">
		insert into user(name,email) values("2","3")
	</select>
	<select id="getUserList"  parameterType="string" resultType="User">
		select * from user
	</select>
	<select id="addUser">
		insert into user(account,password,name,sex,phone,email,states,created_at)
		values
		(#{account},#{password},#{name},#{sex},#{phone},#{email},#{states},#{created_at})
	</select>
	<select id="updateUser">
		update user set account=#{account},password=#{password},name=#{name},sex=#{sex},phone=#{phone},
		email=#{email},states=#{states},created_at=#{created_at}
		where id = #{id}
	</select>
	<select id="deleteUser">
		delete from user where id = #{id}
	</select>
</mapper>