BookController に以下のメソッドを追加する。
@RequestMapping("/delete/{id}") public ModelAndView delete(ModelAndView mav, @PathVariable long id) { mav.setViewName("delete"); Optional<Book> data = repository.findById(id); mav.addObject("book", data.get()); return mav; }
削除確認画面を追加する。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>本の削除</title> </head> <body> <h1>本の削除</h1> <p>この本を削除しますか?</p> <table> <tr> <td><img class="book-image" th:src="${book.image}" /></td> <td th:text="${book.title}"></td> <td th:text="${book.author}"></td> </tr> </table> <form action="/delete" method="post" th:object="${book}"> <input type="hidden" name="id" th:value="*{id}" /> <input type="submit" value="削除する" /> </form> </body> </html>
BookControllerに削除確認のPOSTを受け付けるメソッドを追加する。
@RequestMapping(value = "/delete", method = RequestMethod.POST) public ModelAndView deleteBook(ModelAndView mav, @RequestParam("id") long id) { Optional<Book> data = repository.findById(id); Book book = data.get(); Bookshelf bookshelf = book.getBookshelf(); if (bookshelf != null) { bookshelf.removeBook(book); bookshelfRepository.saveAndFlush(bookshelf); } repository.delete(book); return new ModelAndView("redirect:/"); }