在图书更新时出现异常

在图书更新时出现异常

问题描述:

  之前根据老师的指导在删除和更新出现问题,删除已经解决了,然后在修改还是出现问题

相关代码:

ManagementController.java

1
package com.pre.library.controller;<br><br>import java.io.File;<br>import java.io.IOException;<br>import java.io.PrintWriter;<br>import java.util.List;<br>import java.util.UUID;<br><br>import javax.servlet.ServletException;<br>import javax.servlet.annotation.WebServlet;<br>import javax.servlet.http.HttpServlet;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>import org.apache.commons.fileupload.FileItem;<br>import org.apache.commons.fileupload.FileItemFactory;<br><br>import org.apache.commons.fileupload.disk.DiskFileItemFactory;<br>import org.apache.commons.fileupload.servlet.ServletFileUpload;<br><br><br>import com.pre.library.entity.Books;<br>import com.pre.library.entity.Category;<br>import com.pre.library.service.BookService;<br>import com.pre.library.service.CategoryService;<br>/**<br> * Servlet implementation class ManagementController<br> */<br>@WebServlet("/management")<br>public class ManagementController extends HttpServlet {<br> private static final long serialVersionUID = 1L;<br>    private  BookService bookService=new BookService(); <br>    private CategoryService categoryService=new CategoryService();<br>    /**<br>     * @see HttpServlet#HttpServlet()<br>     */<br>    public ManagementController() {<br>        super();<br>        // TODO Auto-generated constructor stub<br>    }<br><br>    /**<br>  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)<br>  */<br> protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>       request.setCharacterEncoding("utf-8");<br>      response.setContentType("text/html;charset=utf-8");<br>     String method = request.getParameter("method");<br>     if ("bookList".equals(method)) {<br>            this.bookList(request, response);<br>       }else if ("show_addBook".equals(method)) {<br>          this.addBook(request, response);<br>        }else if ("createBook".equals(method)) {<br>               this.createBook(request, response);<br>      }else if("deleteBook".equals(method)) {<br>         this.deleteBook(request, response);<br>     }else if(method.equals("show_updateBook")) {<br>            this.showUpdatePage(request,response);<br>      }else if(method.equals("update")) {<br>         this.update(request,response);<br>      }else if("categoryList".equals(method)) {<br>           this.categoryList(request, response);<br>       }else if("show_Category".equals(method)) {<br>          this.addCategory(request,response);<br>     }else if("categoryCreate".equals(method)) {<br>         this.categoryCreate(request,response);<br>      }<br>   }<br>   //category展示<br>    public void categoryList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>       List<Category> categoryList=categoryService.categoryList();<br>       request.setAttribute("categoryList", categoryList);<br>     request.getRequestDispatcher("/WEB-INF/jsp/categoryList.jsp").forward(request, response);<br>   }<br>   //图书展示<br>  private void bookList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>       List<Books> bookList = bookService.bookList();<br>       request.setAttribute("bookList", bookList);<br>     request.getRequestDispatcher("/WEB-INF/jsp/bookList.jsp").forward(request, response);<br>   }<br>   /**<br>  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)<br>     */<br> protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>      // TODO Auto-generated method stub<br>      doGet(request, response);<br>   }<br>   //显示新增页面<br>        private void addBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>           request.getRequestDispatcher("/WEB-INF/jsp/addBook.jsp").forward(request, response);        <br>        }<br>   //显示新增分类页面<br>      private void addCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   <br>            request.getRequestDispatcher("/WEB-INF/jsp/addCategory.jsp").forward(request, response);<br>        }<br>   //新增图书分类<br>        private void categoryCreate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>            //1. 初始化FileUpload组件<br>            FileItemFactory factory = new DiskFileItemFactory();<br>            /**<br>          * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象<br>            * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析<br>          */<br>         ServletFileUpload sf = new ServletFileUpload(factory);<br>          //2.遍历所有FileItem<br>            try {<br>               List<FileItem>formData=sf.parseRequest(request);<br>              Category category=new Category();<br>               for(FileItem fi:formData) {<br>                 if(fi.isFormField()) {<br>                      System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));<br>                     switch (fi.getFieldName()) {<br>                        case "categoryId":<br>                           category.setCategoryId(Integer.parseInt(fi.getString("UTF-8")));<br>                           break;<br>                      case "categoryName":<br>                            category.setCategoryName(fi.getString("UTF-8"));<br>                            break;<br>                      default:<br>                            break;<br>                      }<br>                   }else {<br>                     System.out.println("文件上传项:" + fi.getFieldName());<br>                   }<br>               }<br>               categoryService.addCategory(category);<br>              response.sendRedirect("/management?method=categoryList");//返回列表页<br>            } catch (Exception e) {<br>             // TODO Auto-generated catch block<br>              e.printStackTrace();<br><br>            }<br>       }<br>   //新增图书信息<br>    private void createBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>        //1. 初始化FileUpload组件<br>        FileItemFactory factory = new DiskFileItemFactory();<br>        /**<br>      * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象<br>        * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析<br>      */<br>     ServletFileUpload sf = new ServletFileUpload(factory);<br>      //2.遍历所有FileItem<br>        try {<br>           List<FileItem>formData=sf.parseRequest(request);<br>          Books book=new Books();<br>         for(FileItem fi:formData) {<br>             if(fi.isFormField()) {<br>                  System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));<br>                 switch (fi.getFieldName()) {<br>                    case "bookId":<br>                      book.setBookId(Integer.parseInt(fi.getString("UTF-8")));<br>                        break;<br>                  case "bookName":<br>                        book.setBookName(fi.getString("UTF-8"));<br>                        break;<br>                  case "categoryId":<br>                      book.setCategoryId(fi.getString("UTF-8"));<br>                      break;<br>                  case "bookPrice":<br>                       book.setBookPrice(Integer.parseInt(fi.getString("UTF-8")));<br>                     break;<br>                  case "remarks":<br>                     book.setRemarks(fi.getString("UTF-8"));<br>                     break;<br>                  default:<br>                        break;<br>                  }<br>               }else {<br>                 System.out.println("文件上传项:" + fi.getFieldName());<br>                   //3.文件保存到服务器目录<br>                  String path = request.getServletContext().getRealPath("/upload");<br>                   System.out.println("上传文件目录:" + path);<br>                   //String fileName = "test.jpg";<br>                 String fileName = UUID.randomUUID().toString();<br>                 //fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg<br>                    String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));<br>                  //fi.write()写入目标文件<br>                  fi.write(new File(path,fileName + suffix));<br>                 book.setBookPic("/upload/" + fileName + suffix);<br>                }<br>           }<br>           bookService.addBook(book);<br>          response.sendRedirect("/management?method=bookList");//返回列表页<br>        } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br><br>        }<br>   }<br>   /**<br>  * 显示更新页面<br>    * @param request<br>    * @param response<br>   * @throws ServletException<br>  * @throws IOException<br>   */<br> private void showUpdatePage(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {<br>     String id = request.getParameter("id");<br>     Books book = bookService.findById(Integer.parseInt(id));<br>        request.setAttribute("book", book);<br>     request.getRequestDispatcher("/WEB-INF/jsp/updateBook.jsp").forward(request, response);<br> }<br>   /**<br>  * 实现油画更新<br>    * @param request<br>    * @param response<br>   * @throws ServletException<br>  * @throws IOException<br>   */<br> private void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {<br>     int isPreviewModified = 0;<br>      //文件上传时的数据处理与标准表单完全不同<br>       /*<br>      String pname = request.getParameter("pname");<br>       System.out.println(pname);<br>      */<br>      //1. 初始化FileUpload组件<br>        FileItemFactory factory = new DiskFileItemFactory();<br>        /**<br>      * FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象<br>        * ServletFileUpload 则是为FileUpload组件提供Java web的Http请求解析<br>      */<br>     ServletFileUpload sf = new ServletFileUpload(factory);<br>      //2. 遍历所有FileItem<br>       try {<br>           List<FileItem> formData = sf.parseRequest(request);<br>           Books book = new Books();<br>           for(FileItem fi:formData) {<br>             if(fi.isFormField()) {<br>                  System.out.println("普通输入项:" + fi.getFieldName() + ":" + fi.getString("UTF-8"));<br>                 switch (fi.getFieldName()) {<br>                    case "bookId":<br>                      book.setBookId(Integer.parseInt(fi.getString("UTF-8")));<br>                        break;<br>                  case "bookName":<br>                        book.setBookName(fi.getString("UTF-8"));<br>                        break;<br>                  case "categoryId":<br>                      book.setCategoryId(fi.getString("UTF-8"));<br>                      break;<br>                  case "bookPrice":<br>                       book.setBookPrice(Integer.parseInt(fi.getString("UTF-8")));<br>                     break;<br>                  case "remaraks":<br>                        book.setRemarks(fi.getString("UTF-8"));<br>                     break;<br>                  case "isPreviewModified":<br>                       isPreviewModified = Integer.parseInt(fi.getString("UTF-8"));<br>                        break;<br>                  default:<br>                        break;<br>                  }<br>               }else {<br>                 if(isPreviewModified == 1) { <br>                       System.out.println("文件上传项:" + fi.getFieldName());<br>                       //3.文件保存到服务器目录<br>                      String path = request.getServletContext().getRealPath("/upload");<br>                       System.out.println("上传文件目录:" + path);<br>                       //String fileName = "test.jpg";<br>                     String fileName = UUID.randomUUID().toString();<br>                     //fi.getName()得到原始文件名,截取最后一个.后所有字符串,例如:wxml.jpg->.jpg<br>                        String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));<br>                      //fi.write()写入目标文件<br>                      fi.write(new File(path,fileName + suffix));<br>                     book.setBookPic("/upload/" + fileName + suffix);<br>                    }<br>               }<br>           }<br>           //更新数据的核心方法<br>         bookService.update(book,isPreviewModified);<br>         response.sendRedirect("/management?method=bookList");//返回列表页<br>        } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }<br>   }<br>   //删除<br>    public void deleteBook(HttpServletRequest request, HttpServletResponse response) throws IOException {<br>       String id = request.getParameter("id");<br>     System.out.println("id"+id);<br>        PrintWriter out = response.getWriter();<br>     try {<br>           bookService.deleteBook(Integer.parseInt(id));<br>           //{"result":"ok"}<br>           out.println("{\"result\":\"ok\"}");<br>     }catch(Exception e) {<br>           e.printStackTrace();<br>            out.println("{\"result\":\"" + e.getMessage() + "\"}");<br>     }<br><br>   }<br>}<br><br>

Books.java:

1
package com.pre.library.entity;<br>/**<br> * 1.类型描述:图书id,图书名,图书分类,价格,图书封面,备注<br> * @author zhanzhimin<br> *<br> */<br>public class Books {<br>  private Integer id;//序号<br> private Integer bookId;//图书id<br>   private String bookName;//图书名<br>   private String categoryId;//图书分类分类1-计算机2-软件工程<br>   private Integer bookPrice;//价格<br>  private String bookPic;//图书封面<br>   private String remarks;//备注<br> public Integer getId() {<br>        return id;<br>  }<br>   public void setId(Integer id) {<br>     this.id=id;<br> }<br>   public Integer getBookId() {<br>        return bookId;<br>  }<br>   public void setBookId(Integer bookId) {<br>     this.bookId = bookId;<br>   }<br>   public String getBookName() {<br>       return bookName;<br>    }<br>   public void setBookName(String bookName) {<br>      this.bookName = bookName;<br>   }<br>   public String getCategoryId() {<br>     return categoryId;<br>  }<br>   public void setCategoryId(String categoryId) {<br>      this.categoryId = categoryId;<br>   }<br>   public Integer getBookPrice() {<br>     return bookPrice;<br>   }<br>   public void setBookPrice(Integer bookPrice) {<br>       this.bookPrice = bookPrice;<br> }<br>   public String getBookPic() {<br>        return bookPic;<br> }<br>   public void setBookPic(String bookPic) {<br>        this.bookPic = bookPic;<br> }<br>   public String getRemarks() {<br>        return remarks;<br> }<br>   public void setRemarks(String remarks) {<br>        this.remarks = remarks;<br> }<br>}<br>

BookDao.java:

1
package com.pre.library.dao;<br><br>import java.util.List;<br><br><br>import com.pre.library.entity.Books;<br>import com.pre.library.utils.XmlDataSource;<br><br>public class BookDao {<br> //图书信息的展示,通过XmlDataSource文件进行读取<br> public List<Books> bookList() {<br>       List<Books> bookList = XmlDataSource.bookData();<br>      return bookList;<br>    }<br>   //查找<br>    public Books findById(Integer id) {<br>     List<Books> data = XmlDataSource.bookData();<br>      Books book = null;<br>      for(Books books  :  data) {<br>         if(books.getId() == id) {<br>               book = books;<br>               break;<br>          }<br>       }<br>       return book;<br>    }<br>   //图书添加<br>  public void addBook(Books book) {<br>       XmlDataSource.appendBook(book);<br> }<br>   //删除图书<br>  public void deleteBook(Integer id) {<br>        XmlDataSource.deleteBook(id);<br>   }<br>   //更新图书<br>  public void update(Books book) {<br>        XmlDataSource.update(book);<br> }<br>}<br>

BookService.java:

1
package com.pre.library.service;<br><br>import java.util.List;<br><br><br>import com.pre.library.dao.BookDao;<br>import com.pre.library.entity.Books;<br><br><br>public class BookService {<br> private BookDao bookDao=new BookDao();<br>  //图书的展示<br> public List<Books> bookList() {<br>       /*List<Books> bookList = XmlDataSource.bookData();<br>        return bookList;*/<br>      return bookDao.bookList();<br>  }<br>   //查询<br>    public Books findById(Integer id) {<br>     Books book = bookDao.findById(id);<br>      if(book==null) {<br>            throw new RuntimeException("[id=" + id +"]图书不存在");<br>      }<br>       return book;<br>    }<br><br>   //图书添加<br>  public void addBook(Books book) {<br>       bookDao.addBook(book);<br>  }<br>   //删除图书<br>  public void deleteBook(Integer id) {<br>        bookDao.deleteBook(id);<br> }<br>   /**<br>  * 更新业务逻辑<br>    * @param newBook 新的图书数据<br>     * @param isPreviewModified 是否修改bookPic属性<br>    */<br> public void update(Books newBook,Integer isPreviewModified) {<br>       Books oldBook=this.findById(newBook.getId());<br>       oldBook.setBookId(newBook.getBookId());<br>     oldBook.setBookName(newBook.getBookName());<br>     oldBook.setBookPrice(newBook.getBookPrice());<br>       oldBook.setRemarks(newBook.getRemarks());<br>       if(isPreviewModified==1) {<br>          oldBook.setBookPic(newBook.getBookPic());<br>       }<br>       bookDao.update(oldBook);<br>    }<br>   public static void main(String[] arge) {<br>        BookService bookService=new BookService();<br>      List<Books> booklist=bookService.bookList();<br>      for(Books books:booklist) {<br>         System.out.println(books.getBookName());<br>        }<br>   }<br>}<br>

XmlDataSource.java:

1
package com.pre.library.utils;<br>import java.io.FileOutputStream;<br>import java.io.IOException;<br>import java.io.OutputStreamWriter;<br>import java.io.UnsupportedEncodingException;<br>import java.io.Writer;<br>import java.net.URLDecoder;<br>import java.util.ArrayList;<br>import java.util.List;<br>import org.dom4j.Document;<br>import org.dom4j.DocumentException;<br>import org.dom4j.Element;<br>import org.dom4j.Node;<br>import org.dom4j.io.SAXReader;<br><br>import com.pre.library.entity.Books;<br>import com.pre.library.entity.Category;<br><br>/**<br> * 数据源类,用于XML文件解析为Java对象<br> * <br> * @author zhanzhimin<br> */<br>public class XmlDataSource {<br>    private static List<Books> data = new ArrayList<Books>();<br>   private static List<Category> categoryData=new ArrayList<Category>();<br>   private static String dataFile;<br> private static String categoryDataFile;<br> static {<br>        // painting.xml文件完整物理地址<br>     // c:\new style\book.xml<br>        // c:\new%20style\book.xml<br>      dataFile = XmlDataSource.class.getResource("/book.xml").getPath();<br>      categoryDataFile=XmlDataSource.class.getResource("/category.xml").getPath();<br>        reloadBooks();<br>      reloadCategory();<br>   }<br>   //对category进行编写<br> public static void reloadCategory() {<br>       // 通过URLDecoder类将Base64转换成普通字符窜<br>     URLDecoder decoder = new URLDecoder();<br>      try {<br>           categoryDataFile=decoder.decode(categoryDataFile,"utf-8");<br>          System.out.println(categoryDataFile);<br>           //利用dom4j进行解析<br>           SAXReader reader=new SAXReader();<br>           Document doucument=reader.read(categoryDataFile);<br>           List<Node> list=doucument.selectNodes("/root/category");<br>          categoryData.clear();<br>           for(Node node:list) {<br>               Element element=(Element)node;<br>              String categoryId=element.elementText("categoryId");<br>                String categoryName=element.elementText("categoryName");<br>                Category category=new Category();<br>               category.setCategoryId(Integer.parseInt(categoryId));<br>               category.setCategoryName(categoryName);<br>             categoryData.add(category);<br>             System.out.println(categoryId+" "+categoryName);<br>            }<br>       } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }<br>   }<br>   //对book公共读取的方法<br>  public static void reloadBooks() {<br>      // 通过URLDecoder类将Base64转换成普通字符窜<br>     URLDecoder decoder = new URLDecoder();<br>      try {<br>           dataFile = decoder.decode(dataFile, "utf-8");<br>           System.out.println(dataFile);<br>           // 利用dom4j对xml解析<br>            SAXReader reader = new SAXReader();<br>         Document document = reader.read(dataFile);<br>          List<Node> list = document.selectNodes("/root/book");<br>         //清空集合的数据<br>           data.clear();<br>           for (Node node : list) {<br>                Element element = (Element) node;<br>               String id = element.attributeValue("id");<br>               String bookId = element.elementText("bookId");<br>              String bookName = element.elementText("bookName");<br>              Books book = new Books();<br>               book.setId(Integer.parseInt(id));<br>               book.setBookId(Integer.parseInt(bookId));<br>               book.setBookName(bookName);<br>             book.setCategoryId(element.elementText("categoryId"));<br>              book.setBookPrice(Integer.parseInt(element.elementText("bookPrice")));<br>              book.setBookPic(element.elementText("bookPic"));<br>                book.setRemarks(element.elementText("remarks"));<br>                data.add(book);<br>             System.out.println(bookId + ":" + bookName);<br>            }<br><br>       } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }<br>   }<br>   //对category增加<br>       public static void appendCategory(Category category) {<br>          //利用SAXReader读取xml文档<br>            SAXReader reader=new SAXReader();<br>           Writer writer=null;<br>         try {<br>               Document document=reader.read(categoryDataFile);<br>                Element root=document.getRootElement();<br>             Element c=root.addElement("category");<br>              //3.创建各个节点<br>              c.addElement("categoryId").setText(category.getCategoryId().toString());<br>                c.addElement("categoryName").setText(category.getCategoryName().toString());<br>                //4.完成追加,写入xml<br>              writer=new OutputStreamWriter(new FileOutputStream(categoryDataFile),"UTF-8");<br>              document.write(writer);<br>         } catch (Exception e) {<br>             // TODO Auto-generated catch block<br>              e.printStackTrace();<br>            }finally {<br>              if(writer!=null) {<br>                  try {<br>                       writer.close();<br>                 } catch (IOException e) {<br>                       // TODO Auto-generated catch block<br>                      e.printStackTrace();<br>                    }<br>               }<br>               reloadCategory();<br>           }<br>       }<br>   /**<br>  * 添加图书的信息<br>   * @param 实体对象Books book<br>     * <br>  */<br> public static void appendBook(Books book) {<br>     //通过SAXReader读取xml文档,得到Document<br>     SAXReader reader=new SAXReader();<br>       Writer writer=null;<br>     try {<br>           Document document=reader.read(dataFile);<br>            //2.创建book.xml的book节点<br>           Element root=document.getRootElement();<br>         Element b=root.addElement("book");<br>          //3.创建各个节点<br>          b.addAttribute("id", String.valueOf(data.size()+1));<br>            b.addElement("bookId").setText(book.getBookId().toString());<br>            b.addElement("bookName").setText(book.getBookName());<br>           b.addElement("categoryId").setText(book.getCategoryId());<br>           b.addElement("bookPrice").setText(book.getBookPrice().toString());<br>          b.addElement("bookPic").setText(book.getBookPic());<br>         b.addElement("remarks").setText(book.getRemarks());<br>         //4.完成追加,写入xml<br>          writer=new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");<br>          document.write(writer);<br>     } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }finally {<br>          if(writer!=null) {<br>              try {<br>                   writer.close();<br>             } catch (IOException e) {<br>                   // TODO Auto-generated catch block<br>                  e.printStackTrace();<br>                }<br>           }<br>           reloadBooks() ;<br>     }<br>   }<br>   //按bookId进行删除<br><br>   public static void deleteBook(Integer id) {<br>     SAXReader reader=new SAXReader();<br>       Writer writer=null;<br>     try {<br>           Document doucment=reader.read(dataFile);<br>            List<Node>nodes=doucment.selectNodes("/root/book[@id="+id+"]");<br>           if(nodes.size()==0) {<br>               throw new RuntimeException("id="+id+"图书编号不存在");<br>         }<br>           Element b=(Element) nodes.get(0);<br>           b.getParent().remove(b);<br>            writer=new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");<br>          doucment.write(writer);<br><br>     } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }finally {<br>          if(writer!=null) {<br>              try {<br>                   writer.close();<br>             } catch (IOException e) {<br>                   // TODO Auto-generated catch block<br>                  e.printStackTrace();<br>                }<br>           }<br>           reloadBooks();<br>      }<br><br>   }<br>   //更新<br>    public static void update(Books book) {<br>     SAXReader reader=new SAXReader();<br>       Writer writer=null;<br>     try {<br>           Document document=reader.read(dataFile);<br>            //节点路径[@属性名=属性值]<br>            // /root/book[@id=x]<br>            List<Node>nodes=document.selectNodes("/root/book[@id="+book.getId()+"]");<br>         if(nodes.size()==0) {<br>               throw new RuntimeException("id="+book.getId()+"图书编号不存在");<br>           }<br>           Element b = (Element)nodes.get(0);<br>          b.selectSingleNode("bookId").setText(book.getBookId().toString());<br>          b.selectSingleNode("bookName").setText(book.getBookName());<br>         b.selectSingleNode("categoryId").setText(book.getCategoryId());<br>         b.selectSingleNode("bookPrice").setText(book.getBookPrice().toString());<br>            b.selectSingleNode("bookPic").setText(book.getBookPic());<br>           b.selectSingleNode("remarks").setText(book.getRemarks());<br>           writer = new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");<br>            document.write(writer);<br>     } catch (Exception e) {<br>         // TODO Auto-generated catch block<br>          e.printStackTrace();<br>        }<br>       finally {<br>           if(writer != null) {<br>                try {<br>                   writer.close();<br>             } catch (IOException e) {<br>                   // TODO Auto-generated catch block<br>                  e.printStackTrace();<br>                }<br>           }<br>           reloadBooks();<br>      }<br>   }<br>   public static List<Books> bookData() {<br>        return data;<br><br>    }<br>   public static List<Category> categoryData(){<br>      return categoryData;<br>    }<br>   public static void main(String[] args) {<br>        /*new XmlDataSource();<br>      List<Books> bk=XmlDataSource.bookData();<br>      System.out.println(bk);*/<br>       //List<Category> cg=XmlDataSource.categoryData();<br>     //System.out.println(cg);<br>       /*Books b=new Books();<br>      b.setBookId(1000);<br>      b.setBookName("软件更新");<br>      b.setCategoryId("计算机");<br>     b.setBookPrice(100);<br>        b.setBookPic("/image/g1.jpg");<br>      b.setRemarks("测试");<br>     //XmlDataSource.deleteBook(11010);*/<br>        //Category c=new Category();<br>        //c.setCategoryId(2);<br>       //c.setCategoryName("计算机");<br>     //XmlDataSource.deleteBook(3);<br>      //List<Books> bk=XmlDataSource.bookData();<br>        //System.out.println(bk);<br><br>   }<br>}<br>

udateBook.jsp:

1
<%@page contentType="text/html;charset=utf-8"%><br><!DOCTYPE html><br><html><br>    <head><br>        <meta charset="UTF-8"><br>        <title>修改图书信息</title><br>        <link rel="stylesheet" href="css/bootstrap.min.css"><br>        <link rel="stylesheet" href="css/add.css"><br>        <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script><br>        <script type="text/javascript" src="js/validation.js"></script><br>        <script><br>          function checkSubmit() {<br>             var a = checkEmpty("#bookId","#errBookId");<br>             var b = checkEmpty('#bookName',"#errBname");<br>            // var c = checkCategory('#categoryId',"#err");<br>             var d = checkPrice('#bookPrice',"#errBookPrice");<br>             var e = checkFile('#bookPic',"#errBookPic");<br>             var f = checkEmpty('#remarks',"#errRemarks");<br>             if (a && b &&  d && e && f) {<br>                   return true;<br>               } else {<br>                  return false;<br>               }<br>  }<br></script><br>    </head><br>    <body><br>        <nav class="navbar navbar-default"><br>            <div class="container"><br>                <div class="navbar-header"><br>                    <a class="navbar-brand" href="/dept/list.do"><br>                        图书信息管理<br>                    </a><br>                </div><br>            </div><br>        </nav><br>        <div class="container"><br>            <div class="jumbotron"><br>                <h1>Hello, XXX!</h1><br>                <p>请小心的修改图书信息。。。</p><br>            </div><br>            <div class="page-header"><br>                <h3><small>修改</small></h3><br>            </div><br>            <form class="form-horizontal" action="/management?show_updateBook" method="post"><br><br>                <div class="form-group"><br>                    <label for="name" class="col-sm-2 control-label">图书编号 :</label><br>                    <div class="col-sm-8"><br>                        <input name="bookId" class="form-control" id="bookId" readonly="readonly" onblur="checkEmpty('#bookId','#errBookId')" value="${book.bookId }"><br>                    </div><br>                </div><br>                <div class="form-group"><br>                    <label for="name" class="col-sm-2 control-label">图书名称 :</label><br>                    <div class="col-sm-8"><br>                        <input name="bookName" class="form-control" id="bookName" onblur="checkEmpty('#bookName','#errBname')" value="${book.bookName }"><br>                    </div><br>                </div><br>                <div class="form-group"><br>                    <label for="categoryId" class="col-sm-2 control-label">分类 :</label><br>                    <select id="categoryId" name="categoryId" class="col-sm-2 form-control" style="width: auto;margin-left: 15px"><br>                       <option value="ca0001" selected="">计算机</option><br>                       <option value="ca0002">文学</option><br>                       <option value="ca0003">历史</option><br>                       <!-- 下拉列表的内容要从分类中进行读取,value值是分类id --><br>                    </select><br>                </div><br><br>                 <div class="form-group"><br>                    <label for="name" class="col-sm-2 control-label">价格 :</label><br>                    <div class="col-sm-8"><br>                        <input name="bookPrice" class="form-control" id="bookPrice" onblur="checkPrice('#bookPrice','#errBookPrice')" value="${book.bookPrice }"><br>                    </div><br>                  </div><br><br>                  <div class="form-group" ><br>                    <label for="name" class="col-sm-2 control-label">图书封面 :</label><br>                    <input type="file" id="bookPic" name="bookPic" style="padding-left: 15px" onchange="checkFile('#bookPic','#errBookPic')"><br>                  </div><br><br>                  <div class="form-group"><br>                    <label for="name" class="col-sm-2 control-label">备注 :</label><br>                    <div class="col-sm-8"><br>                        <input name="remarks" class="form-control" id="remarks" onblur="checkEmpty('#remarks','#errRemarks')" value="${book.remarks}"><br>                    </div><br>                  </div><br><br>                <div class="form-group"><br>                    <div class="col-sm-offset-2 col-sm-10"><br>                        <button type="submit" class="btn btn-primary">修改</button>&nbsp;&nbsp;&nbsp;<br>                    </div><br>                </div><br>            </form><br>        </div><br>        <footer class="text-center" ><br>            copy@imooc<br>        </footer><br>    </body><br></html><br>

book.xml:

1
<?xml version="1.0" encoding="UTF-8"?><br><!-- 数据文件 --><br><root><br> <book id="1"><br>     <bookId>11010</bookId><br>      <bookName>人生哲学</bookName><br>       <categoryId>文学</categoryId><br>     <bookPrice>20</bookPrice><br>       <bookPic>/upload/g1.jpg</bookPic><br>       <remarks>6666</remarks><br> </book><br>   <book id="2"><br>     <bookId>21010</bookId><br>      <bookName>软件工程</bookName><br>       <categoryId>计算机</categoryId><br>        <bookPrice>20</bookPrice><br>       <bookPic>/upload/g1.jpg</bookPic><br>       <remarks>6666</remarks><br> </book><br>   <book id="3"><br>     <bookId>31010</bookId><br>      <bookName>中国地理</bookName><br>       <categoryId>历史</categoryId><br>     <bookPrice>20</bookPrice><br>       <bookPic>/upload/g1.jpg</bookPic><br>       <remarks>6666</remarks><br> </book><br>   <book id="4"><br>     <bookId>41010</bookId><br>      <bookName>数据库原理</bookName><br>      <categoryId>计算机</categoryId><br>        <bookPrice>20</bookPrice><br>       <bookPic>/upload/g1.jpg</bookPic><br>       <remarks>6666</remarks><br> </book><br>   <book id="5"><br>     <bookId>51010</bookId><br>      <bookName>大明历程</bookName><br>       <categoryId>历史</categoryId><br>     <bookPrice>20</bookPrice><br>       <bookPic>/upload/g1.jpg</bookPic><br>       <remarks>6666</remarks><br> </book><br></root>

bookList.jsp:

1
<%@page contentType="text/html;charset=utf-8"%><br><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><br><%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><br><!DOCTYPE html><br><html><br><head><br><meta charset="UTF-8"><br><title>图书后台管理</title><br><link rel="stylesheet" href="css/index.css"><br><link rel="stylesheet" href="css/bootstrap.min.css"><br><script type="text/javascript" src="js/jquery-3.4.1.min.js"></script><br><script src="js/sweetalert2.js" type="text/javascript"></script><br><script type="text/javascript"><br>  //对话框显示预览图<br>  function showPreview(previewObj){<br>       var preview = $(previewObj).attr("data-preview");<br>       var pname = $(previewObj).attr("data-pname");<br>       Swal.fire({<br>         title: pname,<br>           html: "<img src='" + preview + "' style='width:361px;height:240px'>",<br>         showCloseButton: true,<br>          showConfirmButton: false<br>        })<br>  }<br>   //删除数据<br>  function del(delObj){<br>       var id = $(delObj).attr("data-id");<br>     var bookName = $(delObj).attr("data-pname");<br>        var bookPic = $(delObj).attr("data-preview");<br>       Swal.fire({<br>         title : "确定要删除" + bookPic + "该图书吗?",<br>            html : "<img src='" + bookPic + "' style='width:160px;height:90px'>",<br>         showCancelButton: true,<br>         confirmButtonText: "是",<br>         cancelButtonText: "否"<br>       }).then(function(result){<br>           if(result.value==true){<br>             //alert("你点了'是'按钮")<br>             $.ajax({<br>                    url: "/management?method=deleteBook&id=" + id,<br>                  type : "get",<br>                   dataType:"json",<br>                    success : function(json){<br>                       if(json.result=="ok"){<br>                          window.location.reload();<br>                       }else{<br>                          Swal.fire({<br>                             title : json.result<br>                         })<br>                      }<br>                       //console.log(json);<br>                    }<br>               })<br>          }<br>       })<br>  }<br></script><br></head><br><body><br>   <header><br>      <div class="container"><br>           <nav><br>             <a href="/management?method=bookList">图书信息管理</a><br>            </nav><br>            <nav><br>              <a href="/management?method=categoryList">分类管理</a><br>         </nav><br><br>        </div><br>    </header><br> <section class="banner"><br>      <div class="container"><br>           <div><br>             <h1>图书管理系统</h1><br>             <p>图书信息管理</p><br>           </div><br>        </div><br>    </section><br>    <section class="main"><br><br><br>        <div class="container"><br>           <form class="form-horizontal" action="/searchBook" method="post"><br>             <div class="form-group" style="float: right;"><br>                    <div class="col-sm-offset-2 col-sm-10"><br>                       <button type="submit" class="btn btn-primary">查询</button><br>                       &nbsp;&nbsp;&nbsp;<br>                  </div><br>                </div><br>                <div class="form-group" style="float: right; width: 300px;"><br>                  <div class="col-sm-8"><br>                        <input name="searchContent" class="form-control"<br>                         id="searchContent" placeholder="输入要查询的分类" style="width: 250px"><br>                  </div><br>                </div><br><br><br>            </form><br>       </div><br>        <div class="container"><br><br>           <table class="table table-striped"><br>               <thead><br>                   <tr><br>                      <th>序号</th><br>                     <th>图书编号</th><br>                       <th>图书名称</th><br>                       <th>分类</th><br>                     <th>价格</th><br>                     <th>图书封面</th><br>                       <th>操作</th><br><br>                 </tr><br>             </thead><br>              <tbody><br>                   <c:forEach items="${bookList }" var="bookList" varStatus="idx"><br>                       <tr><br>                          <td>${idx.index + 1}</td><br>                           <td>${bookList.bookId}</td><br>                         <td>${bookList.bookName}</td><br>                           <td>${bookList.categoryId}</td><br>                         <td><fmt:formatNumber pattern="¥0.00"<br>                                  value="${bookList.bookPrice}"></fmt:formatNumber></td><br>                           <td><img src="${bookList.bookPic}"></td><br>                          <td><a href="/management?method=show_updateBook&id=${bookList.id}">修改</a><br>                         <a href="javascript:void(0)" data-id="${bookList.id }" data-pname="${bookList.bookName }" data-preview="${bookList.bookPic }" onclick="del(this)">删除</a><br>                            <!--在循环显示数据时,此处的book0001可以用EL表达式进行替换--><br>                       </tr><br>                 </c:forEach><br>              </tbody><br>          </table><br>      </div><br>    </section><br>    <section class="page"><br>        <div class="container"><br>           <div id="fatie"><br>              <a href="/management?method=show_addBook"><button>新建</button></a><br>           </div><br>        </div><br>    </section><br>    <footer> copy@慕课网 </footer><br></body><br></html><br>



相关截图:

http://img1.sycdn.imooc.com//climg/606e813b09e4cd9018970497.jpg

http://img1.sycdn.imooc.com//climg/606e815e09d4149912810712.jpg

正在回答

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

2回答

同学你好,根据报错提示在ManagementController中的第57行出现了异常,根据报错提示显示是空指针异常

http://img1.sycdn.imooc.com//climg/606ec4af0921a3e111770140.jpg

如下问题同学少写了method

http://img1.sycdn.imooc.com//climg/606ecde209a86f3f06650058.jpg

另外这里应该添加

enctype="multipart/form-data"

祝学习愉快~

  • 慕帅5138158 提问者 #1

    老师您好,根据您的指导,修改了,又出现空指针异常

    http://img1.sycdn.imooc.com//climg/606ee7a609108c9212670772.jpg

    2021-04-08 19:24:01
好帮手慕阿园 2021-04-09 11:07:03

同学你好,这里出现控制针异常是因为同学这里的action是show_updateBook,这里应该是update,改成update后修改会报空指针,是因为同学在修改时没有给book设置id,导致controller中调用update()方法时传入的book是没有id的,所以getId时没有获取到,建议同学给book设置个id

另外同学在xml中设置了图书编号,则不需要再重写添加一个id

祝学习愉快~


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

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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