小言_互联网的博客

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5

367人阅读  评论(0)

上一篇博文介绍了注册和登录模块,未看过的人欢迎翻我之前博文~

接下来就进入登录成功后的主界面,这里主要实现主界面的基础布局管理员管理模块=w=

GitHub地址:https://github.com/DaiPanda/Blog-of-Dai

照例有任何问题欢迎下方评论>3<

一、 后台主界面

1.1  图片演示

(默认进入博文管理的博文列表界面,这里暂时不介绍博文管理模块,以后会更)

1.2 详细分析

①登录成功后,登录的用户名将会显示在右上角,譬如刚刚那张图片的“胖达”

(使用session,之前登录成功后先是将登陆的adm对象保存在session中,再进行转发的,具体代码参考上一篇博文。

    如果在index.jsp中获得对象为null,则代表未通过登录页面而是直接在地址栏中输入主页面的地址,这样会重定向到登录页面。)

图示如下:


②总的后台布局使用的是layui框架,主要是使用iframe实现页面的嵌套

(使用iframe标签,相关a标签中的target值对应iframe的name值

   图示如下:


③相关步骤如下:

第一步:通过layui的后台框架将index.jsp的大体结构搭好

第二步:对官方的后台框架进行修改,主要修改左侧导航栏的代码内容

第三步:使用iframe布局达到页面嵌套的效果,即点击不同的导航栏按钮右侧链接不同的页面

第四步:通过session判断是否经过了登录页面


1.3 目录结构

要想实现如图主界面,除了之前几篇博文写的准备工作以外,你还需要这样的目录结构

当然,之前的准备工作没有看的,建议从个人博客的第三篇博文看起

地址:https://blog.csdn.net/DaiYuMeng/article/details/104677362


1.4 详细代码

index.jsp文件:


  
  1. <%@page import="pojo.Adm"%>
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"
  3. pageEncoding= "UTF-8"%>
  4. <%@include file="base.jsp"%>
  5. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  6. <!DOCTYPE html>
  7. <html>
  8. <head>
  9. <meta charset="utf-8">
  10. <meta name="viewport"
  11. content= "width=device-width, initial-scale=1, maximum-scale=1">
  12. <title>熊猫后台 </title>
  13. <%
  14. String name;
  15. Adm a = (Adm) request.getSession().getAttribute("admin");
  16. if (a == null) {
  17. response.sendRedirect("login.jsp");
  18. return;
  19. } else {
  20. name = a.getAdm_name();
  21. }
  22. %>
  23. <style>
  24. .layui-body {
  25. border: none !important;
  26. }
  27. .mydiv {
  28. width: 100%;
  29. position: relative;
  30. top: 0%;
  31. left: 0%;
  32. }
  33. .myframe {
  34. background-color: rgb( 250, 250, 250);
  35. position: relative;
  36. top: 50%;
  37. left: 50%;
  38. margin-left: - 550px;
  39. }
  40. </style>
  41. </head>
  42. <body class="layui-layout-body">
  43. <div class="layui-layout layui-layout-admin">
  44. <div class="layui-header" style="background: skyblue; opacity: 0.7">
  45. <div class="layui-logo">IPanda 博客后台管理系统 </div>
  46. <!-- 头部区域(可配合layui已有的水平导航) -->
  47. <ul class="layui-nav layui-layout-left">
  48. <li class="layui-nav-item"> <a href="">控制台 </a> </li>
  49. <li class="layui-nav-item"> <a href="">商品管理 </a> </li>
  50. <li class="layui-nav-item"> <a href="">用户 </a> </li>
  51. <li class="layui-nav-item"> <a href="javascript:;">其它系统 </a>
  52. <dl class="layui-nav-child">
  53. <dd>
  54. <a href="">邮件管理 </a>
  55. </dd>
  56. <dd>
  57. <a href="">消息管理 </a>
  58. </dd>
  59. <dd>
  60. <a href="">授权管理 </a>
  61. </dd>
  62. </dl> </li>
  63. </ul>
  64. <ul class="layui-nav layui-layout-right">
  65. <li class="layui-nav-item"> <a href="javascript:;"> <img
  66. src= "https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike272%2C5%2C5%2C272%2C90/sign=19ee1139ffdeb48fef64a98c9176514c/810a19d8bc3eb135d7ee3ce3aa1ea8d3fd1f44b9.jpg"
  67. class= "layui-nav-img"> <span id="uname"> <%=name%> </span>
  68. </a>
  69. <dl class="layui-nav-child">
  70. <!--${ctx}/user/index.jsp -->
  71. <dd>
  72. <a href="#" target="myframe">基本资料 </a>
  73. </dd>
  74. <dd>
  75. <a href="">安全设置 </a>
  76. </dd>
  77. </dl> </li>
  78. <li class="layui-nav-item"> <a href="login.jsp">退了 </a> </li>
  79. </ul>
  80. </div>
  81. <div class="layui-side layui-bg-black">
  82. <div class="layui-side-scroll">
  83. <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
  84. <ul class="layui-nav layui-nav-tree" lay-filter="test">
  85. <li class="layui-nav-item layui-nav-itemed"> <a class=""
  86. href= "javascript:;">博文管理 </a>
  87. <dl class="layui-nav-child">
  88. <dd>
  89. <a href="${ctx}/article/listArticle.jsp" target="myframe">博文列表 </a>
  90. </dd>
  91. <dd>
  92. <a href="${ctx}/article/addArticle.jsp" target="myframe">添加博文 </a>
  93. </dd>
  94. </dl> </li>
  95. <li class="layui-nav-item"> <a href="javascript:;">评论管理 </a>
  96. <dl class="layui-nav-child">
  97. <dd>
  98. <a href="${ctx}/comment/listComment.jsp" target="myframe">评论列表 </a>
  99. </dd>
  100. <%-- <dd> <a href="${ctx}/comment/addComment.jsp" target ="myframe">添加评论 </a> </dd> --%>
  101. </dl> </li>
  102. <li class="layui-nav-item"> <a href="javascript:;">分类管理 </a>
  103. <dl class="layui-nav-child">
  104. <dd>
  105. <a href="${ctx}/category/listCategory.jsp" target="myframe">分类列表 </a>
  106. </dd>
  107. <dd>
  108. <a href="${ctx}/category/addCategory.jsp" target="myframe">添加分类 </a>
  109. </dd>
  110. </dl> </li>
  111. <li class="layui-nav-item"> <a href="javascript:;">标签管理 </a>
  112. <dl class="layui-nav-child">
  113. <dd>
  114. <a href="${ctx}/tag/listTag.jsp" target="myframe">标签列表 </a>
  115. </dd>
  116. <dd>
  117. <a href="${ctx}/tag/addTag.jsp" target="myframe">添加标签 </a>
  118. </dd>
  119. </dl> </li>
  120. <li class="layui-nav-item"> <a href="javascript:;">友链管理 </a>
  121. <dl class="layui-nav-child">
  122. <dd>
  123. <a href="${ctx}/friend/listFriend.jsp" target="myframe">友链列表 </a>
  124. </dd>
  125. <dd>
  126. <a href="${ctx}/friend/addFriend.jsp" target="myframe">添加友链 </a>
  127. </dd>
  128. </dl> </li>
  129. <li class="layui-nav-item"> <a href="javascript:;">管理员管理 </a>
  130. <dl class="layui-nav-child">
  131. <dd>
  132. <a href="${ctx}/adm/listAdm.jsp" target="myframe">管理员列表 </a>
  133. </dd>
  134. <%-- <dd> <a href="${ctx}/adm/addAdm.jsp" target ="myframe">添加管理员 </a> </dd> --%>
  135. </dl> </li>
  136. </ul>
  137. </div>
  138. </div>
  139. <div class="layui-body" style="background-color: rgb(250, 250, 250);">
  140. <!-- 内容主体区域 -->
  141. <div class="mydiv">
  142. <iframe name="myframe" width="1100" height="728" frameborder="0"
  143. class= "myframe" src= "article/listArticle.jsp"> </iframe>
  144. </div>
  145. </div>
  146. <div class="layui-footer">
  147. <!-- 底部固定区域 -->
  148. © Daipanda.com - 使用layui框架
  149. </div>
  150. </div>
  151. <script>
  152. //JavaScript代码区域
  153. layui.use( 'element', function() {
  154. var element = layui.element;
  155. });
  156. </script>
  157. </body>
  158. </html>

二、管理员模块

1.1  图片演示

①管理员列表(含分页)

②编辑管理员

③删除管理员


1.2  详细分析

①管理员管理在左侧导航栏第六个管理的位置,相关具体代码在index.jsp中位置如下:

(总体代码在上方)


②listAdm.jsp是使用layui里的经典的数据表格布局,这就对他从后台传回来的数据有一定的要求,官网要求如下:

(详细介绍及扩展部分见官网:https://www.layui.com/doc/modules/table.html


③layui的table布局中有三种渲染方法:方法渲染、自动渲染、静态表格渲染,这里使用的是方法渲染,要求如下:

cols里面各个field对应于每一列的表头,其field的值应该与后台传过来的属性变量名是一样的,这里我的命名和数据库中字段名也是一样的

(这里渲染的数据还可以使用自定义列模板templet,以后再更该用法)


④listAdm.jsp渲染数据表格时还使用了分页效果,相关步骤如下:

第一步:设置开启table的分页效果(page:true) 

第二步:servlet层获取limit(默认10)和page(默认1)参数值

第三步:通过AdmDaoImpl.java里的getPageAdm(page,limit)方法返回相关管理员每页数据,是一个ArrayList对象

第四步:通过AdmDaoImpl.java里的getAllAdm()方法返回相关管理员总数,是一个int变量

代码图示如下:


⑤前台回调数据实现管理员列表时,具体来说接收的是符合一定规则的json数据,这里我掌握了两个方法

第一个方法:(1)先使用map集合,保存相关数据格式

                      (2)再利用google的json解析包将map格式转为string格式,google的json包目录如下,没有的可以私信我

                            

                      (3)然后返回给前台,ajax回调时选择json格式就会自动把其转换为json格式

                           (我使用这个方法,但我觉得这个相对下面比较复杂)


第二个方法:也是先使用map存储数据,再利用json的jar包,首先你需要如下jar包,没有的可以私信我

                     

代码图示如下:


⑥listAdm.jsp使用了layui经典的弹出层效果制作编辑管理员信息,图例如下:

操作步骤:根据满足条件的事件触发执行弹出层动画,弹出层由另外的页面(editAdm.jsp)组成


⑦综上,listAdm.jsp详细步骤如下

第一步:运用方法渲染的格式,其table的id值与渲染表格的elem值要对应

图示如下:

               


第二步:使用layui的数据表格table结构,在url里写入对应的数据接口(管理员列表的数据接口)

图示如下:

                  


第二步:写入对应的工具条模板,就相当于操作模板,注意script的type值

图示如下:

                


第三步:监听工具条,layEvent对应

举例如下:

            


第四步:(1)点击某一项的编辑按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“编辑”事件

              (2)利用弹出层的content属性,走到servlet层,同时将adm_id传回去

              (3)它获取adm_id是通过data.adm_id的方法,因为之前渲染数据时数据接口返回的值都存在data里头

                   图示如下:

                                    

              (4)它先走selectAdm这个控制层的接口,然后从Dao层的getOneAdm()通过adm_id读取对应的一条管理员的数据,返回的是Adm对象,将其对应信息保存在request属性中,最后再将数据转发到editAdm.jsp页面

                  图示如下:

                

              (5)编辑弹出层主要是利用layui的form组件,利用getAttribute()方法获得上一步存储的属性值

                    图示如下:

                     


第五步:(1)点击某一项的删除按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“删除”事件

              (2)利用layui提供的confirm弹出对话框,提示用户执行下一步操作

              (3)当用户点击“确定”时,先删除对应行的DOM结构(假删除),再通过ajax向服务端发送删除指令,调用delAdm接口,传过去adm_id(真删除)

                  图示如下:

                               

          (4)在delAdm接口中,先获得传过来的id,再利用Dao层的deleteAdm(int id)方法,这个方法返回一个boolean值

            (5)将这个boolean值返回给前端,然后前端通过这个值判断是否删除成功,删除成功就会弹出“删除成功”提示

                 图示如下:

                               


1.3  具体代码

首先,Adm.java、AdmDao.java以及AdmDaoImpl.java等已经在上一篇博文里详细写了,这里就不赘述了

①src-->在servlet包里-->新建一个Servlet文件,命名为ListAdm-->在URL mappings中改名为/listAdm-->键入代码,如下

ListAdm.java


  
  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.annotation.WebServlet;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.json.JSONArray;
  13. import org.json.JSONObject;
  14. import com.google.gson.JsonObject;
  15. import dao.AdmDao;
  16. import dao.AdmDaoImpl;
  17. import pojo.Adm;
  18. import util.JsonUtil;
  19. /**
  20. * Servlet implementation class ListAdm
  21. */
  22. @WebServlet("/listAdm")
  23. public class ListAdm extends HttpServlet {
  24. private static final long serialVersionUID = 1L;
  25. /**
  26. * @see HttpServlet#HttpServlet()
  27. */
  28. public ListAdm() {
  29. super();
  30. // TODO Auto-generated constructor stub
  31. }
  32. /**
  33. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  34. */
  35. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  36. int limit = 0;
  37. int page = 0;
  38. PrintWriter writer = null;
  39. try {
  40. limit = Integer.parseInt(request.getParameter( "limit"));
  41. page = Integer.parseInt(request.getParameter( "page"));
  42. AdmDao a = new AdmDaoImpl();
  43. ArrayList<Adm> aList = a.getPageAdm(page, limit);
  44. ArrayList<Adm> aListTotal = a.getAllAdm();
  45. Map<String, Object> map = new HashMap<String, Object>();
  46. map.put( "code", 0);
  47. map.put( "msg", "");
  48. map.put( "count", aListTotal.size());
  49. map.put( "data", aList);
  50. //String jsonStr = JsonUtil.beanToString(map);
  51. //writer.write(jsonStr);
  52. writer= response.getWriter();
  53. net.sf.json.JSONObject jsonStr = net.sf.json.JSONObject.fromObject(map);
  54. writer.print(jsonStr);
  55. } catch(Exception e) {
  56. e.printStackTrace();
  57. } finally {
  58. writer.flush();
  59. writer.close();
  60. }
  61. }
  62. /**
  63. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  64. */
  65. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  66. // TODO Auto-generated method stub
  67. doGet(request, response);
  68. }
  69. }

②src-->在servlet包里-->新建一个Servlet文件,命名为SelectAdm-->在URL mappings中改名为/selectAdm-->键入代码,如下

SelectAdm.java


  
  1. package servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import dao.AdmDao;
  9. import dao.AdmDaoImpl;
  10. import dao.CategoryDao;
  11. import dao.CategoryDaoImpl;
  12. import pojo.Adm;
  13. import pojo.Category;
  14. /**
  15. * Servlet implementation class SelectAdm
  16. */
  17. @WebServlet("/selectAdm")
  18. public class SelectAdm extends HttpServlet {
  19. private static final long serialVersionUID = 1L;
  20. /**
  21. * @see HttpServlet#HttpServlet()
  22. */
  23. public SelectAdm() {
  24. super();
  25. // TODO Auto-generated constructor stub
  26. }
  27. /**
  28. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  29. */
  30. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  31. try {
  32. int adm_id = Integer.parseInt(request.getParameter( "adm_id"));
  33. AdmDao a = new AdmDaoImpl();
  34. Adm adm = a.getOneAdm(adm_id);
  35. if(adm!= null) {
  36. request.setAttribute( "adm_id", adm.getAdm_id());
  37. request.setAttribute( "adm_name",adm.getAdm_name());
  38. request.setAttribute( "adm_password", adm.getAdm_passward());
  39. request.getRequestDispatcher( "adm/editAdm.jsp").forward(request, response); //转发到成功页面
  40. }
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. /**
  46. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  47. */
  48. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  49. // TODO Auto-generated method stub
  50. doGet(request, response);
  51. }
  52. }

③src-->在servlet包里-->新建一个Servlet文件,命名为EditAdm-->在URL mappings中改名为/editAdm-->键入代码,如下

EditAdm.java


  
  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  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 dao.AdmDao;
  10. import dao.AdmDaoImpl;
  11. import pojo.Adm;
  12. /**
  13. * Servlet implementation class EditAdm
  14. */
  15. @WebServlet("/editAdm")
  16. public class EditAdm extends HttpServlet {
  17. private static final long serialVersionUID = 1L;
  18. /**
  19. * @see HttpServlet#HttpServlet()
  20. */
  21. public EditAdm() {
  22. super();
  23. // TODO Auto-generated constructor stub
  24. }
  25. /**
  26. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  27. */
  28. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  29. String result = "false";
  30. PrintWriter writer = null;
  31. try {
  32. int adm_id = Integer.parseInt(request.getParameter( "adm_id"));
  33. String adm_name = request.getParameter( "adm_name");
  34. String adm_password = request.getParameter( "adm_password");
  35. Adm adm = new Adm();
  36. adm.setAdm_id(adm_id);
  37. adm.setAdm_name(adm_name);
  38. adm.setAdm_passward(adm_password);
  39. AdmDao a = new AdmDaoImpl();
  40. boolean flag = a.updateAdm(adm);
  41. System.out.println(flag);
  42. if(flag) {
  43. result = "true";
  44. }
  45. writer = response.getWriter();
  46. writer.write(result);
  47. } catch(Exception e) {
  48. e.printStackTrace();
  49. } finally {
  50. writer.flush();
  51. writer.close();
  52. }
  53. }
  54. /**
  55. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  56. */
  57. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  58. // TODO Auto-generated method stub
  59. doGet(request, response);
  60. }
  61. }

④在WebContent的adm目录下-->新建jsp文件,命名为listAdm.jsp-->键入代码,如下

listAdm.jsp


  
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding= "UTF-8"%>
  3. <%@include file="../base.jsp"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <link href="../css/base.css" rel="stylesheet" media="screen" />
  9. <title>管理员列表 </title>
  10. </head>
  11. <body>
  12. <div id="box">
  13. <table id="demo" lay-filter="test"> </table>
  14. </div>
  15. </body>
  16. <!-- 这里实现了分页效果 -->
  17. <script>
  18. layui.use( 'table', function() {
  19. var table = layui.table;
  20. //开始渲染表格
  21. table.render({
  22. elem : '#demo', //要渲染的表格id
  23. height : 480, //表格的高度
  24. width : 635, //表格的宽度
  25. url : '${ctx}/listAdm', //数据接口
  26. page : true, //开启分页
  27. cols : [ [ //表头
  28. {
  29. field : 'adm_id',
  30. title : 'ID',
  31. width : 80,
  32. sort : true,
  33. fixed : 'left'
  34. },
  35. {
  36. field : 'adm_name',
  37. title : '管理员昵称',
  38. width : 160,
  39. },
  40. {
  41. field : 'adm_password',
  42. title : '管理员密码',
  43. width : 210
  44. }, {
  45. title : '操作',
  46. toolbar : '#barDemo',
  47. width : 180
  48. } ] ],
  49. done: function(res){
  50. //如果是异步请求数据方式,res即为你接口返回的信息
  51. console.log(res);
  52. }
  53. });
  54. //监听工具条
  55. table.on( 'tool(test)', function(obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
  56. var data = obj.data; //获得当前行数据
  57. var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
  58. var tr = obj.tr; //获得当前行 tr 的DOM对象
  59. if (layEvent === 'detail') { //查看
  60. /*
  61. 后来可以查看父id的值
  62. */
  63. layer.msg( "你今天真好看!!", {
  64. icon : 1
  65. });
  66. } else if (layEvent === 'del') { //删除
  67. layer.confirm( '真的删除该管理员么??', function(index) {
  68. obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
  69. layer.close(index);
  70. //向服务端发送删除指令
  71. $.post( "${ctx}/delAdm", {
  72. adm_id : data.adm_id
  73. }, function(result) {
  74. if (result) {
  75. layer.msg( "删除成功!!", {
  76. icon : 1
  77. });
  78. table.reload( 'demo');
  79. }
  80. }, "json");
  81. });
  82. layer.close(index);
  83. } else if (layEvent === 'edit') { //编辑
  84. //弹出层
  85. layer.open({
  86. title : [ "编辑管理员", "text-align:center"],
  87. type : 2,
  88. offset : [ "80px" ], //位置
  89. area : [ "500px", "220px" ], //大小
  90. content : [ '${ctx}/selectAdm?adm_id=' + data.adm_id, "no"], //这里content是一个URL,如果你不想让iframe出现滚动条,你还可以content: ['http://sentsin.com', 'no']
  91. anim: 1,
  92. //当窗口关闭时执行
  93. end : function() {
  94. table.reload( 'demo');
  95. }
  96. });
  97. }
  98. });
  99. });
  100. </script>
  101. <!--工具条模板 -->
  102. <script type="text/html" id="barDemo">
  103. <a class= "layui-btn layui-btn-xs" lay-event= "detail">查看</a>
  104. <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  105. <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  106. </script>
  107. </html>

⑥在WebContent的adm目录下-->新建jsp文件,命名为editAdm.jsp-->键入代码,如下

editAdm.jsp


  
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding= "UTF-8"%>
  3. <%@include file ="../base.jsp" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>编辑管理员 </title>
  9. </head>
  10. <body>
  11. <!-- session由服务器产生,保存在服务器的内存中,sessionid会返回给客户端 -->
  12. <%
  13. int adm_id = ( int) request.getAttribute( "adm_id");
  14. String adm_name = ( String) request.getAttribute( "adm_name");
  15. String adm_password = ( String) request.getAttribute( "adm_password");
  16. %>
  17. <form class="layui-form" action="">
  18. <!-- hidden = "hidden" -->
  19. <input value = " <%=adm_id %> " hidden = "hidden" id = "tid">
  20. <div class="layui-form-item">
  21. <label class="layui-form-label">管理员名: </label>
  22. <div class="layui-input-inline" style="width: 200px;">
  23. <input type="text" name="title" lay-verify="title"
  24. autocomplete= "off" placeholder= "请输入管理员名称" class= "layui-input"
  25. id= "adm_name" name= "adm_name" value = " <%=adm_name%> ">
  26. <span id="tip" style="color:red;margin-top:20px;"> </span>
  27. </div>
  28. </div>
  29. <div class="layui-form-item">
  30. <label class="layui-form-label">管理员密码: </label>
  31. <div class="layui-input-inline" style="width: 200px;">
  32. <input type="text" name="title" lay-verify="title"
  33. autocomplete= "off" placeholder= "请输入管理员密码" class= "layui-input"
  34. id= "adm_password" name= "adm_password" value = " <%=adm_password%> ">
  35. </div>
  36. </div>
  37. <div class="layui-form-item">
  38. <div class="layui-input-block">
  39. <div class="layui-btn" lay-submit="" lay-filter="demo1" id="sub">立即提交 </div>
  40. <button type="reset" class="layui-btn layui-btn-primary">重置 </button>
  41. </div>
  42. </div>
  43. </form>
  44. <script type="text/javascript">
  45. layui.use([ 'layer' ], function() {
  46. var isOk = false;
  47. $( "#adm_name").blur( function(){
  48. if ($( "#adm_name").val() == "") {
  49. layer.msg( "不能输入为空哦!", {
  50. icon : 2
  51. });
  52. return;
  53. } else {
  54. $.post( 'isExist',
  55. {
  56. username : $( '#adm_name').val()
  57. },
  58. function(result) {
  59. //alert(typeof result);
  60. if(result== "true"){
  61. //alert(1);
  62. isOk = false;
  63. //利用jquery对元素设置样式
  64. $( '#username').css( "border", "1px solid red");
  65. $( '#tip').html( '该用户已存在');
  66. $( '#tip').css( "color", "red");
  67. return;
  68. } else{
  69. //alert(2);
  70. isOk = true;
  71. //利用jquery对元素设置样式
  72. $( '#username').css( "border", "1px solid gray");
  73. //html() 设置标签之间的 内容
  74. $( '#tip').html( '该用户名可用');
  75. $( '#tip').css( "color", "green");
  76. }
  77. }, "text");
  78. }
  79. });
  80. $( "#sub").click( function(){
  81. if (!isOk) {
  82. layer.msg( "管理员名是唯一的哦!", {
  83. icon : 2
  84. });
  85. return;
  86. } else{
  87. $.post( "${ctx}/editAdm", //后台地址
  88. {
  89. adm_password : $( "#adm_password").val(),
  90. adm_name : $( "#adm_name").val(),
  91. adm_id : $( "#tid").val()
  92. }, //需要提交到后台的数据
  93. function(result) {
  94. if (result) {
  95. //修改成功
  96. layer.msg( "修改成功", {
  97. icon : 1
  98. });
  99. //假设这是iframe页
  100. var index = parent.layer.getFrameIndex( window.name); //先得到当前iframe层的索引
  101. parent.layer.close(index); //再执行关闭
  102. }
  103. }, //回调函数
  104. "json");
  105. }
  106. });
  107. });
  108. </script>
  109. </body>
  110. </html>

1.4 易错点分析之转发与重定向的区别

    (1)转发地址栏不会发生变化,显示的依然是上一个地址栏的地址

    (2)转发一般带ServletRequest和Servletresponse对象过去,所以数据不会丢失

    (3)重定向地址栏会发生变化

    (4)重定向没有带数据过去,即数据会丢失


如果有任何问题,欢迎在下方留言~

我如果看到了就一定会回复的=w=

注:GitHub下载地址在文章顶部,也传到了csdn下载上面,希望能对你有所帮助;

也欢迎关注我的个人微信公众号【大胖猫的马太效应】,回复关键字JavaWeb博客后台管理系统获得本后台项目所有源码噢~ 


转载:https://blog.csdn.net/DaiYuMeng/article/details/104698898
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场