老师检查下 为什么删除没反应
来源:4-15 自由编程
Deity_zc
2020-09-07 18:50:25
list.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>油画列表</title>
<link rel="stylesheet" type="text/css" href="css/list.css"/>
<script type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="js/sweetalert2.js"></script>
<script type="text/javascript">
// previewObj:预览的对象
function showPreview(previewObj) {
var preview = $(previewObj).attr("data-preview");
var pname = $(previewObj).attr("data-pname");
Swal.fire({
title: pname,
html: "<img src='" + preview + "' style='width: 361px;height: 240px;' />",
showCloseButton: true,
showConfirmButton: false
})
}
// delObj:删除对象
function del(delObj) {
var id = $(delObj).attr("data-id");
var pname = $(delObj).attr("data-pname");
var preview = $(delObj).attr("data-preview");
Swal.fire({
title: "确定要删除[" + pname + "]油画吗?",
html: "<img src='" + preview + "' style='width: 361px;height: 240px;' />",
showCancelButton: true,
confirmButtonText: "是",
cancelButtonText: "否"
}).then(function (result) {
if (result.value == true) {
$.ajax({
"url": "/management?method=&id=" + id,
"type": "get",
"dataType": "json",
"success": function (json) {
if (json.result == "ok") {
window.location.reload();
} else {
Swal.fire({
"title": json.result
})
}
}
})
}
})
}
</script>
</head>
<body>
<div class="container">
<fieldset>
<legend>油画列表</legend>
<div style="height: 40px">
<a href="/management?method=show_create" class="btn-button">新增</a>
</div>
<!-- 油画列表 -->
<table cellspacing="0px">
<thead>
<tr style="width: 150px;">
<th style="width: 100px">分类</th>
<th style="width: 150px;">名称</th>
<th style="width: 100px;">价格</th>
<th style="width: 400px">描述</th>
<th style="width: 100px">操作</th>
</tr>
</thead>
<c:forEach var="painting" items="${requestScope.pageModel.pageData}">
<tr>
<td>
<c:choose>
<c:when test="${painting.category == 1}">
现实主义
</c:when>
<c:when test="${painting.category == 2}">
抽象主义
</c:when>
<c:otherwise>
未知的类型
</c:otherwise>
</c:choose>
</td>
<td>${painting.pname}</td>
<td><fmt:formatNumber value="${painting.price}" pattern="¥0.00"></fmt:formatNumber></td>
<td>${painting.description}</td>
<td>
<a class="oplink" data-preview="${painting.preview}" data-pname="${painting.pname}"
href="javascript:void(0)" onclick="showPreview(this)">预览</a>
<a class="oplink" href="/management?method=show_update&id=${painting.id}">修改</a>
<a class="oplink" href="javascript:void(0)" data-preview="${painting.preview}"
data-pname="${painting.pname}"
data-id="${painting.id}" onclick="del(this)">删除</a>
</td>
</tr>
</c:forEach>
</table>
<!-- 分页组件 -->
<ul class="page">
<li><a href="/management?method=list&p=1">首页</a></li>
<li>
<a href="/management?method=list&p=${requestScope.pageModel.hasPreviousPage?requestScope.pageModel.page -1:1}">上页</a>
</li>
<c:forEach begin="1" end="${requestScope.pageModel.totalPages}" var="number" step="1">
<li ${number == requestScope.pageModel.page? "class='active'":""}>
<a href="/management?method=list&method=list&p=${number}">
${number}
</a>
</li>
</c:forEach>
<li>
<a href="/management?method=list&p=${requestScope.pageModel.hasNextPage?requestScope.pageModel.page +1:requestScope.pageModel.totalPages}">下页</a>
</li>
<li><a href="/management?method=list&p=${requestScope.pageModel.totalPages}">尾页</a></li>
</ul>
</fieldset>
</div>
</body>
</html>
XmlDataSource
package com.mgallery.utils;
import com.mgallery.entity.Painting;
import com.sun.xml.internal.bind.v2.model.core.EnumLeafInfo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.awt.*;
import java.io.*;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
public class XmlDataSource {
private static List<Painting> data = new ArrayList();
//初始化
private static String dataFile;
static {
dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();
reload();
}
private static void reload() {
URLDecoder decoder = new URLDecoder();
try {
dataFile = decoder.decode(dataFile, "UTF-8");
System.out.println(dataFile);
SAXReader reader = new SAXReader();
//1.获取文档对象Document 读取指定的XML
Document document = reader.read(dataFile);
//2.Xpath得到XML节点集合
List<Node> nodes = document.selectNodes("/root/painting");
//清空原有数据
data.clear();
//遍历集合
for (Node node : nodes) {
Element element = (Element) node;
String id = element.attributeValue("id");
String name = element.elementText("pname");
Painting painting = new Painting();
painting.setId(Integer.parseInt(id));
painting.setPname(name);
painting.setCategory(Integer.parseInt(element.elementText("category")));
painting.setPrice(Integer.parseInt(element.elementText("price")));
painting.setPreview(element.elementText("preview"));
painting.setDescription(element.elementText("description"));
data.add(painting);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取所有油画 Painting对象
*
* @return Painting List
*/
public static List<Painting> getRawData() {
//获取原始信息 = 查询所有
return data;
}
/**
* 追加新的油画数据
*
* @param painting Painting实体对象
*/
public static void append(Painting painting) {
//1. 读取XML文档,得到Document对象
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
//2. 创建新的painting节点
Element root = document.getRootElement();//得到<root>根节点
Element p = root.addElement("painting");//添加新的painting节点
//3. 创建painting节点的各个子节点
p.addAttribute("id", String.valueOf(data.size() + 1));
p.addElement("pname").setText(painting.getPname());
p.addElement("category").setText(painting.getCategory().toString());
p.addElement("price").setText(painting.getPrice().toString());
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
//4. 写入XML,完成追加
writer = new OutputStreamWriter(new FileOutputStream(dataFile), "UTF-8");
document.write(writer);//新节点更新
System.out.println(dataFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
reload();
}
}
/**
* 更新对应id的XML油画数据
*
* @param painting 要更新的油画数据
* @throws IOException
*/
public static void update(Painting painting) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
List<Node> nodes = document.selectNodes("/root/painting[@id = " + painting.getId() + "]");
if (nodes.size() == 0) {
throw new RuntimeException("id = " + painting.getId() + "编号油画不存在");
}
Element p = (Element) nodes.get(0);
//赋值
p.selectSingleNode("pname").setText(painting.getPname());
p.selectSingleNode("category").setText(painting.getCategory().toString());
p.selectSingleNode("price").setText(painting.getPrice().toString());
p.selectSingleNode("preview").setText(painting.getPreview());
p.selectSingleNode("description").setText(painting.getDescription());
writer = new OutputStreamWriter(new FileOutputStream(dataFile), "UTF-8");
document.write(writer);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
reload();
}
}
/**
* 删除方法
*
* @param id 删除id对应的数据
*/
public static void delete(Integer id) {
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
List<Node> nodes = document.selectNodes("/root/painting[@id = " + id + "]");
System.out.println(nodes);
if (nodes.size() == 0) {
throw new RuntimeException("id = " + id + "编号油画不存在");
}
//调用nodes.get(0)来获得第一个<painting>
Element p = (Element) nodes.get(0);
//移除
Element r = p.getParent();
r.remove(p);
writer = new OutputStreamWriter(new FileOutputStream(dataFile), "UTF-8");
document.write(writer);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
reload();
}
}
public static void main(String[] args) {
/* List<Painting> ps = XmlDataSource.getRawData();
System.out.println(ps);*/
Painting p = new Painting();
p.setId(6);
XmlDataSource.delete(p.getId());
}
}
PaintingDao
package com.mgallery.dao;
import com.mgallery.entity.Painting;
import com.mgallery.utils.PageModel;
import com.mgallery.utils.XmlDataSource;
import java.util.ArrayList;
import java.util.List;
//油画数据访问对象
public class PaintingDao {
/**
* 分页查询油画数据
* @param page 页号(第几页)
* @param rows 每页记录数(一页多少行)
* @return PageModel 分页对象
*/
//page: rows:
public PageModel pagination(int page ,int rows){
//获取原始数据对其进行分页处理
List<Painting> list = XmlDataSource.getRawData();//得到油画数据
PageModel pageModel = new PageModel(list,page,rows);
return pageModel;
}
/**
* 按类别分页查询
* @param category 分类编号
* @param page 页号
* @param rows 每页行数
* @return 分页对象
*/
public PageModel pagination(int category,int page,int rows){
List<Painting> paintingList = XmlDataSource.getRawData();
List<Painting> categoryList = new ArrayList<>();
for (Painting p :paintingList){
if (p.getCategory() == category){
categoryList.add(p);
}
}
PageModel pageModel = new PageModel(categoryList,page,rows);
return pageModel;
}
/**
* 数据新增
*/
public void create(Painting painting){
XmlDataSource.append(painting);
}
/**
* 按编号查询油画
* @param id 油画编号
* @return 油画对象
*/
public Painting findById(Integer id) {
List<Painting> data = XmlDataSource.getRawData();
Painting painting = null;
for (Painting p : data) {
if (p.getId() == id) {
painting = p;
break;
}
}
return painting;
}
/**
* 数据修改
* @param painting 修改的Painting数据
*/
public void update(Painting painting){
XmlDataSource.update(painting);
}
/**
* 删除油画
* @param id 删除id对应的数据
*/
public void delete(Integer id){
XmlDataSource.delete(id);
}
}
PaintingService
package com.mgallery.service;
import com.mgallery.dao.PaintingDao;
import com.mgallery.entity.Painting;
import com.mgallery.utils.PageModel;
import com.mgallery.utils.XmlDataSource;
import java.util.List;
//PaintingService油画服务类
public class PaintingService {
private PaintingDao paintingDao = new PaintingDao();
/**
* pagination 数据分页查询
*
* @param page 页号
* @param rows 每页行数
* @param category 可选参数,分类编号
* @return 分页对象
*/
public PageModel pagination(int page, int rows, String... category) {
if (rows == 0) {
throw new RuntimeException("无效的rows参数");
}
if (category.length == 0 || category[0] == null) {
return paintingDao.pagination(page, rows);
} else {
//category是数组且前面只有一个category参数,所以下标为0
return paintingDao.pagination(Integer.parseInt(category[0]), page, rows);
}
}
/**
* 新增油画
*
* @param painting 准备新增的Painting数据
*/
public void create(Painting painting) {
paintingDao.create(painting);
}
/**
* 按编号查询油画
*
* @param id 油画编号
* @return 油画对象
*/
public Painting findById(Integer id) {
Painting p = paintingDao.findById(id);
if (p == null) {
throw new RuntimeException("[id = " + id + "]油画不存在");
}
return p;
}
/**
* 修改油画
*
* @param newPainting 修改的Painting数据
*/
public void update(Painting newPainting, int isPreviewModified) {
Painting painting = paintingDao.findById(newPainting.getId());
if (isPreviewModified == 1) {
painting.setPreview(newPainting.getPreview());
}
painting.setPname(newPainting.getPname());
painting.setCategory(newPainting.getCategory());
painting.setPrice(newPainting.getPrice());
painting.setDescription(newPainting.getDescription());
paintingDao.update(painting);
}
/**
* 删除数据
* @param id 删除id对应数据
*/
public void delete(Integer id){
paintingDao.delete(id);
}
public static void main(String[] args) {
PaintingService service = new PaintingService();
PageModel model = service.pagination(2, 6);
List<Painting> list = model.getPageData();
for (Painting p : list) {
System.out.println(p.getPname());
}
System.out.println(model.getPageStartRow() + ":" + model.getPageEndRow());
}
}
ManagementController
package com.mgallery.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mgallery.entity.Painting;
import com.mgallery.service.PaintingService;
import com.mgallery.utils.PageModel;
import jdk.nashorn.internal.ir.debug.JSONWriter;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;
@WebServlet("/management")
public class ManagementController extends HttpServlet {
//油画服务类
private PaintingService paintingService = new PaintingService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
//判断哪种处理方法
String method = req.getParameter("method");
if (method.equals("list")) {
//显示分页查询列表
this.list(req, resp);
} else if (method.equals("delete")) {
//调用删除方法
this.delete(req, resp);
} else if (method.equals("show_create")) {
//显示新增页面
this.showCreatePage(req, resp);
} else if (method.equals("create")) {
this.create(req, resp);
} else if (method.equals("show_update")) {
//显示修改页面
this.showUpdatePage(req, resp);
} else if (method.equals("update")) {
this.update(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String page = req.getParameter("p");
String rows = req.getParameter("r");
if (page == null) {
page = "1";
}
if (rows == null) {
rows = "6";
}
PageModel pageModel = paintingService.pagination(Integer.parseInt(page), Integer.parseInt(rows));
req.setAttribute("pageModel", pageModel);
//请求转发
req.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req, resp);
}
//新增油画页面
private void showCreatePage(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求转发
req.getRequestDispatcher("/WEB-INF/jsp/create.jsp").forward(req, resp);
}
//新增油画方法
private void create(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(factory);
try {
List<FileItem> formData = sf.parseRequest(req);
Painting painting = new Painting();
for (FileItem fi : formData) {
if (fi.isFormField()) {
System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
switch (fi.getFieldName()) {
case "pname":
painting.setPname(fi.getString("UTF-8"));
break;
case "category":
painting.setCategory(Integer.parseInt(fi.getString("UTF-8")));
break;
case "price":
painting.setPrice(Integer.parseInt(fi.getString("UTF-8")));
break;
case "description":
painting.setDescription(fi.getString("UTF-8"));
break;
default:
break;
}
} else {
System.out.println("文件上传项:" + fi.getFieldName());
//3. 文件保存到服务器目录
String path = req.getServletContext().getRealPath("/upload");
System.out.println("上传文件目录:" + path);
String fileName = UUID.randomUUID().toString();
String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
fi.write(new File(path, fileName + suffix));
painting.setPreview("/upload/" + fileName + suffix);
}
}
paintingService.create(painting);//新增功能
resp.sendRedirect("/management?method=list");
} catch (Exception e) {
e.printStackTrace();
}/*catch (FileUploadException e) {
//表单数据不是enctype="multipart/form-data" 时,抛出异常
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}*/
}
//显示更新页面
private void showUpdatePage(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
Painting painting = paintingService.findById(Integer.parseInt(id));
req.setAttribute("painting", painting);
//请求转发
req.getRequestDispatcher("/WEB-INF/jsp/update.jsp").forward(req, resp);
}
//修改油画方法
private void update(HttpServletRequest req, HttpServletResponse resp) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(factory);
try {
List<FileItem> list = sf.parseRequest(req);
Painting p = new Painting();
int isPreviewModified = 0;
for (FileItem f : list) {
if (f.isFormField()) {
switch (f.getFieldName()) {
case "pname":
p.setPname(f.getString("UTF-8"));
break;
case "category":
p.setCategory(Integer.parseInt(f.getString("UTF-8")));
break;
case "price":
p.setPrice(Integer.parseInt(f.getString("UTF-8")));
break;
case "description":
p.setDescription(f.getString("UTF-8"));
break;
case "id":
p.setId(Integer.parseInt(f.getString("UTF-8")));
break;
case "isPreviewModified":
isPreviewModified = Integer.parseInt(f.getString("UTF-8"));
default:
break;
}
} else {
if (isPreviewModified == 1) {
String path = req.getServletContext().getRealPath("/upload");
String fileName = UUID.randomUUID().toString();
String suffix = f.getName().substring(f.getName().lastIndexOf("."));
f.write(new File(path, fileName + suffix));
p.setPreview("/upload/" + fileName + suffix);
}
}
}
paintingService.update(p, isPreviewModified);
resp.sendRedirect("/management?method=list");
} catch (Exception e) {
e.printStackTrace();
}
}
public void delete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Integer id = Integer.parseInt(req.getParameter("id"));
System.out.println("id =" + id);
try {
paintingService.delete(id);
String result = "{\"result\":\"'ok\"}";
JSONObject json = JSON.parseObject(result);
resp.getWriter().println(json);
} catch (IOException e) {
e.printStackTrace();
String result = "{\"result\":" + e.getMessage() + "}";
JSONObject json = JSON.parseObject(result);
resp.getWriter().println(json);
}
}
}
1回答
同学你好,检查贴出代码,在ajax请求的url地址中,注意delete参数的传递,比如:

如上所示,修改后重启项目再来试试。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~