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:/");
}