Bootstrap4+MySQL前后端综合实训-Day07-AM【ajax局部刷新——(单个/批量)删除用户按钮的实现、更新用户信息按钮的实现】

偏执的太偏执、 2022-12-23 09:44 122阅读 0赞

【Bootstrap4前端框架+MySQL数据库】前后端综合实训【10天课程 博客汇总表 详细笔记】【附:实训所有代码】

目 录

(单个/批量)删除用户按钮的实现、更新用户信息按钮的实现——展示

DeleteUserServlet.java

SelectUserByIdServlet.java

UpdateUserServlet.java

user_manager.html


(单个/批量)删除用户按钮的实现、更新用户信息按钮的实现——展示

批量删除用户:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0OTEzNQ_size_16_color_FFFFFF_t_70

单个删除用户:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0OTEzNQ_size_16_color_FFFFFF_t_70 1

更新用户信息:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0OTEzNQ_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0OTEzNQ_size_16_color_FFFFFF_t_70 3

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk0OTEzNQ_size_16_color_FFFFFF_t_70 4

DeleteUserServlet.java

  1. package com.newcapec.servlet;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import java.util.Arrays;
  5. import java.util.HashMap;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import com.alibaba.fastjson.JSON;
  12. import com.newcapec.dao.UserInfoDao;
  13. /**
  14. * Servlet implementation class DeleteUserServlet
  15. */
  16. @WebServlet(name = "/DeleteUserServlet", urlPatterns = "/DeleteUserServlet")
  17. public class DeleteUserServlet extends HttpServlet {
  18. private static final long serialVersionUID = 1L;
  19. private UserInfoDao userInfoDao = new UserInfoDao();
  20. /**
  21. * @see HttpServlet#HttpServlet()
  22. */
  23. public DeleteUserServlet() {
  24. super();
  25. // TODO Auto-generated constructor stub
  26. }
  27. /**
  28. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  29. * response)
  30. */
  31. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  32. throws ServletException, IOException {
  33. // TODO Auto-generated method stub
  34. response.getWriter().append("Served at: ").append(request.getContextPath());
  35. }
  36. /**
  37. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  38. * response)
  39. */
  40. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  41. throws ServletException, IOException {
  42. // 此处可以使用过滤器批量处理
  43. request.setCharacterEncoding("utf-8");
  44. response.setContentType("text/json;charset=utf-8");
  45. String[] userIds = request.getParameterValues("userIds[]");
  46. // 使用userInfoDao执行批量删除
  47. int[] ids = new int[userIds.length];
  48. for (int i = 0; i < userIds.length; i++) {
  49. ids[i] = Integer.valueOf(userIds[i]);
  50. }
  51. try {
  52. boolean flag = userInfoDao.batchDeleteById(ids);
  53. HashMap<String, Boolean> result = new HashMap<>();
  54. result.put("flag", flag);
  55. response.getWriter().write(JSON.toJSONString(result));
  56. } catch (ClassNotFoundException | SQLException e) {
  57. // TODO 自动生成的 catch 块
  58. e.printStackTrace();
  59. }
  60. }
  61. }

SelectUserByIdServlet.java

  1. package com.newcapec.servlet;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import com.alibaba.fastjson.JSON;
  10. import com.newcapec.dao.UserInfoDao;
  11. import com.newcapec.entity.UserInfoEntity;
  12. /**
  13. * Servlet implementation class SelectUserByIdServlet
  14. */
  15. @WebServlet(name = "/SelectUserByIdServlet", urlPatterns = "/SelectUserByIdServlet")
  16. public class SelectUserByIdServlet extends HttpServlet {
  17. private static final long serialVersionUID = 1L;
  18. private UserInfoDao userInfoDao = new UserInfoDao();
  19. /**
  20. * @see HttpServlet#HttpServlet()
  21. */
  22. public SelectUserByIdServlet() {
  23. super();
  24. // TODO Auto-generated constructor stub
  25. }
  26. /**
  27. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  28. * response)
  29. */
  30. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  31. throws ServletException, IOException {
  32. // 此处可以使用过滤器批量处理
  33. request.setCharacterEncoding("utf-8");
  34. response.setContentType("text/json;charset=utf-8");
  35. int userId = Integer.parseInt(request.getParameter("userId"));
  36. try {
  37. UserInfoEntity userInfoEntity = userInfoDao.selectById(userId);
  38. response.getWriter().write(JSON.toJSONString(userInfoEntity));
  39. } catch (ClassNotFoundException | SQLException e) {
  40. // TODO 自动生成的 catch 块
  41. e.printStackTrace();
  42. }
  43. }
  44. /**
  45. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  46. * response)
  47. */
  48. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  49. throws ServletException, IOException {
  50. // TODO Auto-generated method stub
  51. doGet(request, response);
  52. }
  53. }

UpdateUserServlet.java

  1. package com.newcapec.servlet;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import java.util.HashMap;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import com.alibaba.fastjson.JSON;
  11. import com.newcapec.dao.UserInfoDao;
  12. import com.newcapec.entity.UserInfoEntity;
  13. /**
  14. * Servlet implementation class UpdateUserServlet
  15. */
  16. @WebServlet(name = "/UpdateUserServlet", urlPatterns = "/UpdateUserServlet")
  17. public class UpdateUserServlet extends HttpServlet {
  18. private static final long serialVersionUID = 1L;
  19. private UserInfoDao userInfoDao = new UserInfoDao();
  20. /**
  21. * @see HttpServlet#HttpServlet()
  22. */
  23. public UpdateUserServlet() {
  24. super();
  25. // TODO Auto-generated constructor stub
  26. }
  27. /**
  28. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  29. * response)
  30. */
  31. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  32. throws ServletException, IOException {
  33. // TODO Auto-generated method stub
  34. response.getWriter().append("Served at: ").append(request.getContextPath());
  35. }
  36. /**
  37. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  38. * response)
  39. */
  40. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  41. throws ServletException, IOException {
  42. // 此处可以使用过滤器批量处理
  43. request.setCharacterEncoding("utf-8");
  44. response.setContentType("text/json;charset=utf-8");
  45. int userId = Integer.parseInt(request.getParameter("userId"));
  46. String userName = request.getParameter("userName");
  47. String userPwd = request.getParameter("userPwd");
  48. UserInfoEntity entity = new UserInfoEntity(userId, userName, userPwd);
  49. try {
  50. boolean flag = userInfoDao.update(entity);
  51. HashMap<String, Boolean> result = new HashMap<>();
  52. result.put("flag", flag);
  53. response.getWriter().write(JSON.toJSONString(result));
  54. } catch (ClassNotFoundException | SQLException e) {
  55. // TODO 自动生成的 catch 块
  56. e.printStackTrace();
  57. }
  58. }
  59. }

user_manager.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <!-- 新 Bootstrap4 核心 CSS 文件 -->
  7. <link rel="stylesheet" href="../bootstrap4/css/bootstrap.min.css">
  8. <link rel="stylesheet" type="text/css" href="../font-awesome-4.7.0/css/font-awesome.min.css" />
  9. <link href="../bootstrap-table/bootstrap-table.min.css" rel="stylesheet" />
  10. <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
  11. <script src="../jquery/jquery.min.js"></script>
  12. <!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js -->
  13. <script src="../js/popper.min.js"></script>
  14. <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
  15. <script src="../bootstrap4/js/bootstrap.min.js"></script>
  16. <script src="../bootstrap-table/bootstrap-table.js"></script>
  17. <script src="../bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
  18. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  19. <title>用户管理</title>
  20. <script type="text/javascript">
  21. function batchDelete() {
  22. var rows = $('#userInfoTab').bootstrapTable('getSelections');
  23. console.log(rows);
  24. var userIds = new Array();
  25. for (var i = 0; i < rows.length; i++) {
  26. userIds.push(rows[i].userId);
  27. }
  28. console.log(userIds);
  29. $.ajax({
  30. type: "POST",
  31. url: "../DeleteUserServlet",
  32. data: { "userIds": userIds },
  33. success: function (msg) {
  34. if (msg.flag) {
  35. alert("成功");
  36. //刷新数据
  37. $('#userInfoTab').bootstrapTable("refresh");
  38. } else {
  39. alert("失败");
  40. }
  41. }
  42. });
  43. }
  44. function addUserInfo() {
  45. var userName = $("#addUserName").val();
  46. var userPwd = $("#addUserPwd").val();
  47. var userdata = {
  48. "userName": userName,
  49. "userPwd": userPwd
  50. };
  51. $.ajax({
  52. type: "POST",
  53. url: "../AddUserServlet",
  54. data: userdata,
  55. success: function (msg) {
  56. if (msg.flag) {
  57. alert("成功");
  58. //刷新数据
  59. $('#userInfoTab').bootstrapTable("refresh");
  60. } else {
  61. alert("失败");
  62. }
  63. $("#addUserName").val("");
  64. $("#addUserPwd").val("");
  65. }
  66. });
  67. }
  68. function edit(userId) {
  69. console.log(userId);
  70. //通过该ID获取数据
  71. //通过ajax发起请求获取用户信息
  72. $.ajax({
  73. type: "get",
  74. url: "../SelectUserByIdServlet",
  75. data: { "userId": userId },
  76. success: function (msg) {
  77. console.log(msg);
  78. //获取成功后填入参数展示模态框
  79. $("input[name='userId']").val(msg.userId);
  80. $("input[name='userName']").val(msg.userName);
  81. $("input[name='userPwd']").val(msg.userPwd);
  82. $("#updateUserInfo").modal('show');
  83. }
  84. });
  85. //执行更新
  86. }
  87. function updateUserInfo() {
  88. var userInfo = {
  89. "userId": $("input[name='userId']").val(),
  90. "userName": $("input[name='userName']").val(),
  91. "userPwd": $("input[name='userPwd']").val()
  92. };
  93. $.ajax({
  94. type: "post",
  95. url: "../UpdateUserServlet",
  96. data: userInfo,
  97. success: function (msg) {
  98. if (msg.flag) {
  99. alert("成功");
  100. //刷新数据
  101. $('#userInfoTab').bootstrapTable("refresh");
  102. } else {
  103. alert("失败");
  104. }
  105. $("input[name='userId']").val("");
  106. $("input[name='userName']").val("");
  107. $("input[name='userPwd']").val("");
  108. }
  109. });
  110. }
  111. </script>
  112. </head>
  113. <body>
  114. <div style="padding: 10px">
  115. <div id="toolbar" style="display: flex;">
  116. <button type="button" class="btn btn-info" data-toggle="modal" data-target="#addUserInfo">
  117. <i class="fa fa-plus"></i> 添加
  118. </button>
  119. <button type="button" class="btn btn-danger" onclick="batchDelete()">
  120. <i class="fa fa-minus"></i> 批量删除
  121. </button>
  122. <!-- <input type="text" placeholder="请输入用户名" id="userName" value="zhangsan"/><button class="btn btn-info" onclick='search()'><i class="fa fa-search"></i></button> -->
  123. </div>
  124. <table id="userInfoTab" class="table table-hover table-bordered table-striped">
  125. </table>
  126. <div class="modal fade" id="updateUserInfo">
  127. <div class="modal-dialog">
  128. <div class="modal-content">
  129. <!-- 模态框头部 -->
  130. <div class="modal-header bg-info">
  131. <h4 class="modal-title">更新用户信息</h4>
  132. <button type="button" class="close" data-dismiss="modal">×</button>
  133. </div>
  134. <!-- 模态框主体 -->
  135. <div class="modal-body">
  136. <form>
  137. <input type="hidden" name="userId" />
  138. <div class="input-group mb-3">
  139. <div class="input-group-prepend">
  140. <span class="input-group-text"><i class="fa fa-user"></i></span>
  141. </div>
  142. <input type="text" name="userName" class="form-control" placeholder="Username">
  143. </div>
  144. <div class="input-group mb-3">
  145. <div class="input-group-prepend">
  146. <span class="input-group-text"><i class="fa fa-lock"></i></span>
  147. </div>
  148. <input type="password" name="userPwd" class="form-control" placeholder="userpwd">
  149. </div>
  150. </form>
  151. </div>
  152. <!-- 模态框底部 -->
  153. <div class="modal-footer">
  154. <button type="button" class="btn btn-success" data-dismiss="modal"
  155. onclick=updateUserInfo()>更新</button>
  156. <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. <!-- 模态框 -->
  162. <div class="modal fade" id="addUserInfo">
  163. <div class="modal-dialog">
  164. <div class="modal-content">
  165. <!-- 模态框头部 -->
  166. <div class="modal-header bg-info">
  167. <h4 class="modal-title">添加用户信息</h4>
  168. <button type="button" class="close" data-dismiss="modal">×</button>
  169. </div>
  170. <!-- 模态框主体 -->
  171. <div class="modal-body">
  172. <form>
  173. <div class="input-group mb-3">
  174. <div class="input-group-prepend">
  175. <span class="input-group-text"><i class="fa fa-user"></i></span>
  176. </div>
  177. <input type="text" id="addUserName" class="form-control" placeholder="Username">
  178. </div>
  179. <div class="input-group mb-3">
  180. <div class="input-group-prepend">
  181. <span class="input-group-text"><i class="fa fa-lock"></i></span>
  182. </div>
  183. <input type="password" id="addUserPwd" class="form-control" placeholder="userpwd">
  184. </div>
  185. </form>
  186. </div>
  187. <!-- 模态框底部 -->
  188. <div class="modal-footer">
  189. <button type="button" class="btn btn-success" data-dismiss="modal"
  190. onclick=addUserInfo()>添加</button>
  191. <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. <script>
  198. var icons = {
  199. paginationSwitchDown: 'fa-caret-square-down',
  200. paginationSwitchUp: 'fa-caret-square-up',
  201. refresh: 'fa-refresh',
  202. toggleOff: 'fa-toggle-off',
  203. toggleOn: 'fa-toggle-on',
  204. columns: 'fa-th-list',
  205. fullscreen: 'fa-arrows-alt',
  206. detailOpen: 'fa-plus',
  207. detailClose: 'fa-minus'
  208. };
  209. //异步加载表格数据
  210. $('#userInfoTab').bootstrapTable({
  211. url: '../SelectAllServlet', //请求后台的URL(*)
  212. method: 'get', //请求方式(*)
  213. toolbar: '#toolbar', //工具按钮用哪个容器
  214. striped: true, //是否显示行间隔色
  215. cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
  216. pagination: true, //是否显示分页(*)
  217. icons: icons, //重新定义图标 修复图标加载失败问题
  218. queryParams: function (params) {
  219. var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
  220. limit: params.limit, //页面大小
  221. offset: params.offset //页码
  222. //userName: $("#userName").val()
  223. //statu: $("#txt_search_statu").val()
  224. };
  225. return temp;
  226. },
  227. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  228. pageNumber: 1, //初始化加载第一页,默认第一页
  229. pageSize: 10, //每页的记录行数(*)
  230. pageList: [10, 15, 20, 25], //可供选择的每页的行数(*)
  231. //search: true, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
  232. strictSearch: true,
  233. showRefresh: true, //是否显示刷新按钮
  234. clickToSelect: true, //是否启用点击选中行
  235. uniqueId: "userId", //每一行的唯一标识,一般为主键列
  236. //showToggle:true, //是否显示详细视图和列表视图的切换按钮
  237. //cardView: false, //是否显示详细视图
  238. columns: [{
  239. checkbox: true
  240. }, {
  241. field: 'userId',
  242. title: '用户Id'
  243. }, {
  244. field: 'userName',
  245. title: '用户名'
  246. }, {
  247. field: 'createTime',
  248. title: '创建时间'
  249. }, {
  250. field: 'updateTime',
  251. title: '更新时间'
  252. }, {
  253. field: 'userId',
  254. title: '编辑',
  255. formatter: function (value, row, index) {
  256. var e = '<a class="btn btn-waring" href="#" mce_href="#" title="编辑" onclick="edit(\''
  257. + row.userId
  258. + '\')"><i class="fa fa-edit"></i>编辑</a> ';
  259. return e;
  260. }
  261. }]
  262. });
  263. </script>
  264. </body>
  265. </html>

本周:

  1. 周二(2020年11月24日)下午~周四(2020年11月26日)上午:应该都是自己练习,把项目补充完整!!!
  2. 周四(2020年11月26日)下午~周五(2020年11月27日)上午——实训汇报。
  3. 周五(2020年11月27日)下午回郑州。为期3周的禹州实训,结束!!!
  4. 周六(2020年11月28日):第12届全国大学生数学竞赛

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读