删除用户遇到问题,请老师解答

删除用户遇到问题,请老师解答

<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  String basePath = request.getScheme() + "://" + request.getServerName() +
        ":" + request.getServerPort() + request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>管理员查询</title>
  <script type="text/javascript" src="<%=basePath%>/resource/js/jquery-1.12.4.min.js"></script>
</head>
<body>
  <center>
     <h1>管理员查询</h1>
     <div align="center"><a href="<%=basePath%>/server.jsp" target="main">返回主界面</a></div>
     <hr>
     <table cellspacing="0px" cellpadding="0px" border="1px" width="600px">
        <thead>
           <tr>
              <th>用户名</th>
              <th>密码</th>
              <th>类型</th>
              <th>操作</th>
           </tr>
        </thead>
        <%
           List<Map<String, Object>> userlist = (List<Map<String, Object>>)session.getAttribute("userlist");
        %>
        <tbody id="cont">

           <c:forEach items="${userlist}" var="user">

              <tr>
                 <td>${user.username}</td>
                 <td>${user.password}</td>
                 <td>
                    <c:if test="${user.level == '000'}">
                       超级管理员
                    </c:if>
                    <c:if test="${user.level == '001'}">
                       普通管理员
                    </c:if>

                 </td>
                 <input type="hidden"  name="username" value="${user.username}">
                 <%--<<input type="button" value="删除" id="delete">--%>
                 <td><a href="" id="delete" onclick="return false">删除</a></td>
              </tr>
           </c:forEach>
        </tbody>
     </table>
  </center>
</body>
<script type="text/javascript">
  $("#delete").click(function () {
  // function refresh () {
     $.ajax({
        url:"<%=basePath%>/DeleteServlet",
        type:"post",
        data:{
               username:$("input[name=username]").val()
        },
        dataType:"json",
        success:function (result) {
           var list = eval(result);
           var content = null;
           if(list != null){
               for(var i in list){
                   var username = list[i].username;
                   var password = list[i].password;
                   var level = list[i].level;
                   content = content + "<tr><td>" + username + "</td><td>" + password + "</td><td>" + level + "</td></tr>";

              }
                   $("#cont>tr").remove();
              $("#cont").html(content);
           }
           }
     });

   });
</script>
</html>

------------------------------------------------


package com.leo.course.servlet;

import com.leo.course.server.CourseServiceImpl;
import org.json.JSONArray;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@WebServlet(name = "DeleteServlet")
public class DeleteServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       CourseServiceImpl csi = new CourseServiceImpl();
       List<Map<String, Object>> userlist = csi.getAllUsers();

       String username = request.getParameter("username");
       System.out.println(username);

       //删除用户
       csi.delUser(username);
       request.getSession().setAttribute("userlist", userlist);

       //将结果回传
       JSONArray jsonArray = new JSONArray(userlist);
       response.getOutputStream().write(jsonArray.toString().getBytes("UTF-8"));

       for(Map m : userlist){
           System.out.println(m);
       }
   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doGet(request, response);
   }
}

问题1:不能删除任意用户,点删除无反应。只能按照添加的顺序来删除用户。

问题2:删除用户后,界面没刷新。

http://img1.sycdn.imooc.com//climg/5c0b9a1c0001b47913450362.jpg

http://img1.sycdn.imooc.com//climg/5c0b9a1c0001c71213900386.jpg


正在回答

登陆购买课程后可参与讨论,去登陆

7回答

因为for循环遍历集合之后会有多个id为delete的a标签,所以ajax不知道你要删除哪个,所以建议你按下图的方式进行修改。使用onclick方法来触发异步请求。

http://img1.sycdn.imooc.com//climg/5c0e3890000119a109890089.jpg

然后在js代码中修改一下触发方法的代码就可以了。

http://img1.sycdn.imooc.com//climg/5c0e38810001353606170293.jpg

js代码如下,如果还有什么疑问可以继续提问哦,祝学习愉快~

<script type="text/javascript">
function shanchu(e){
  // function refresh () {
      var value=e.getAttribute("data-value");
      alert(value);
     $.ajax({
        url:"<%=basePath%>/deleteServlet",
        type:"post",
        data:{
               username:value
        },
        dataType:"json",
        success:function (result) {
           var list = eval(result);
           console.log(list);
           var content = null;
           if(list != null){
               for(var i in list){
                   var username = list[i].username;
                   var password = list[i].password;
                   var level = list[i].level;
                   content = content + "<tr><td>" + username + "</td><td>" + password + "</td><td>" + level + "</td></tr>";

              }
                   $("#cont>tr").remove();
              $("#cont").html(content);
           }
        }
     });
  }
</script>
</html>


  • leoleo524 提问者 #1
    可以了,谢谢老师
    2018-12-10 20:10:26
chrismorgen 2018-12-10 16:04:17

你好同学,测试了你的代码是可以进行删除和异步同步信息的。下图是列表中的数据信息。

http://img1.sycdn.imooc.com//climg/5c0e1d5600010b9906560197.jpg

点击删除之后实现了如下效果,请问同学是想实现这样的操作效果吗?祝学习愉快~


http://img1.sycdn.imooc.com//climg/5c0e1d0100016d7b06750171.jpg


  • 提问者 leoleo524 #1
    我这里也能实现删除效果,但是不能任意删除用户,只能按添加用户顺序来删除。如果老师看我的代码没问题,我再找找是不是其他原因造成的。
    2018-12-10 16:09:36
提问者 leoleo524 2018-12-10 11:31:35

删除方法改了过来。问题1和3请老师看截图:

http://img1.sycdn.imooc.com//climg/5c0dde090001a9e819150480.jpg

http://img1.sycdn.imooc.com//climg/5c0dde090001932108550929.jpg


chrismorgen 2018-12-10 11:10:15

1、请问你在DeleteServlet中是否能打印出username的值呢?

http://img1.sycdn.imooc.com//climg/5c0dd8530001ce3907440105.jpg

2、在删除管理员信息时,建议你将移除管理员的操作放在for循环外,放在for循环内容易报错。

http://img1.sycdn.imooc.com//climg/5c0dd8bf000180a107010492.jpg

3、删除用户后,界面如果没更新,建议你在浏览器中按f12,看一下浏览器的控制台中有没有报错,祝学习愉快~

提问者 leoleo524 2018-12-09 15:04:59

package com.leo.course.server;

import com.leo.course.dao.CourseDaoImpl;
import com.leo.course.model.Course;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class CourseServiceImpl implements CourseService {
   private CourseDaoImpl cdi = new CourseDaoImpl();

   //用户登录
   @Override
   public int login(String username, String password) {
       return cdi.login(username, password);
   }

   //普通管理员添加方法
   @Override
   public void addUser(String username, String password) {
       cdi.addUser(username, password);
   }

   //查询所有管理员
   @Override
   public List<Map<String, Object>> getAllUsers() {
       return cdi.getAllUsers();
   }

   //删除管理员
   @Override
   public void delUser(String username) {
       cdi.delUser(username);
   }

   //添加课程
   @Override
   public void addCourse(Course course) {
       cdi.addCourse(course);
   }

   //查询所有课程信息
   @Override
   public List<Course> getAllCourse() {
       return cdi.getAllCourse();
   }

   //批量导入Excel课程数据
   @Override
   public void importCourse(ArrayList<ArrayList<String>> courseList) {
       cdi.importCourse(courseList);
   }

   //课程导出
   @Override
   public void exportCourse(HttpServletResponse response) {

   }
}

提问者 leoleo524 2018-12-09 12:42:13

package com.leo.course.dao;

import com.leo.course.model.Course;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* DAO层,专门处理业务逻辑
* 接口实现类
*/
public class CourseDaoImpl implements CourseDao {
   //用户表
   private static final List<Map<String, Object>> usersTable = new ArrayList<>();

   //课程表
   private static final List<Course> coursesTable = new ArrayList<>();

   //静态代码块:用于添加超级管理员imooc到usersTable中
   static {
       Map<String, Object> userMap = new HashMap<>();
       userMap.put("level", "000");
       userMap.put("username", "immoc");
       userMap.put("password", "immoc");
//        userMap.put("user", "123456");
       usersTable.add(userMap);
   }

   //用户登录
   @Override
   public int login(String username, String password) {
       int flag = 1;
       for(Map map : usersTable){
           if(map.get("username").equals(username)){
//                    flag = 0;
               if(map.get("password").equals(password)){
                   flag = 0;
               }
           }
       }
       return flag;
   }

   //普通管理员添加
   @Override
   public void addUser(String username, String password) {
       Map<String, Object> userMap = new HashMap<>();
       userMap.put("level", "001");
       userMap.put("username", username);
       userMap.put("password", password);
       usersTable.add(userMap);
   }

   //查询所有管理员
   @Override
   public List<Map<String, Object>> getAllUsers() {
       return usersTable;
   }

   //删除管理员
   @Override
   public void delUser(String username) {
       if(!usersTable.isEmpty()){
           for(Map map : usersTable){
               if(map.get("username").equals(username)){
                   usersTable.remove(map);
                   break;
               }
           }
       }
   }

   //添加课程
   @Override
   public void addCourse(Course couse) {
       coursesTable.add(couse);
   }

   //查询所有课程信息
   @Override
   public List<Course> getAllCourse() {
       return coursesTable;
   }

   //批量导入Excel课程表数据
   @Override
   public void importCourse(ArrayList<ArrayList<String>> courseList) {

   }
}

chrismorgen 2018-12-09 12:29:45

建议同学将CourseServiceImpl中的代码和相关的代码也粘贴一下,方便我们进行调试并具有针对性的为你解答,注意粘贴代码的时候要粘贴到回答中,不要粘贴到回复中,否则会失去代码格式,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师