删除用户遇到问题,请老师解答
<%@ 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:删除用户后,界面没刷新。
正在回答
因为for循环遍历集合之后会有多个id为delete的a标签,所以ajax不知道你要删除哪个,所以建议你按下图的方式进行修改。使用onclick方法来触发异步请求。
然后在js代码中修改一下触发方法的代码就可以了。
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>
你好同学,测试了你的代码是可以进行删除和异步同步信息的。下图是列表中的数据信息。
点击删除之后实现了如下效果,请问同学是想实现这样的操作效果吗?祝学习愉快~
1、请问你在DeleteServlet中是否能打印出username的值呢?
2、在删除管理员信息时,建议你将移除管理员的操作放在for循环外,放在for循环内容易报错。
3、删除用户后,界面如果没更新,建议你在浏览器中按f12,看一下浏览器的控制台中有没有报错,祝学习愉快~
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) {
}
}
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) {
}
}
建议同学将CourseServiceImpl中的代码和相关的代码也粘贴一下,方便我们进行调试并具有针对性的为你解答,注意粘贴代码的时候要粘贴到回答中,不要粘贴到回复中,否则会失去代码格式,祝学习愉快~
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星