老师检查下 为什么删除没反应

来源: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回答

好帮手慕小班

2020-09-07

同学你好,检查贴出代码,在ajax请求的url地址中,注意delete参数的传递,比如:

http://img.mukewang.com/climg/5f5614c70910cdf506280173.jpg

如上所示,修改后重启项目再来试试。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0
heity_zc
h 已好 谢谢老师
h020-09-07
共2条回复

0 学习 · 16556 问题

查看课程