Как получить все значения для полей модели из варианта с тимелеафом? - PullRequest
0 голосов
/ 29 мая 2020

Я изучаю весеннюю загрузку и получил задание сделать простое приложение CRUD. У меня есть страница «добавить книгу»:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Book adding</title>
</head>
<body>
    <p style="text-align: center;">
        Book adding</p>
    <hr/>
    <form id="add-book-form" th:action="@{/book/add}" th:method="post" action="main.html" th:object="${book}">
        <p style="text-align: center;">
            Title:</p>
        <p style="text-align: center;">
            <input name="title" type="text" th:field="*{title}"/></p>
        <p style="text-align: center;">
            Author:</p>
        <p style="text-align: center;">
            <label>
                <select name="authors" size="1" th:field="${book.author.name}">
                    <option th:each="author : ${authors}" th:object="${author}" th:text="*{name}" th:value="*{name}">Unknown</option>
                </select>
            </label>
        </p>
        <p style="text-align: center;">
            Genre:</p>
        <p style="text-align: center;">
            <input name="genre" type="text" th:field="*{genre.name}"/></p>
        <p style="text-align: center;">
            <input name="addBook" type="submit" value="Add"/></p>
    </form>
</body>
</html>

и контроллер для этого:

@GetMapping("/add")
    public String addBookPage(Model model) {
        model.addAttribute("book", new Book());
        model.addAttribute("authors", authorRepo.findAll());
        return "addBook";
    }

@PostMapping("/book/add")
    public RedirectView addBook(@ModelAttribute Book book) {
        bookRepo.save(book);
        return new RedirectView("/");
    }

Я хочу получить «id» и «name» для «автора» сущность из "опции". потому что теперь, когда я отправляю «/ book / add», он получает только «name», а «id» - ноль. например:

2020-05-29 12:32:17.572 DEBUG 39334 --- [nio-8080-exec-4] o.a.coyote.http11.Http11InputBuffer      : Received [POST /book/add HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 116
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/add?
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: Idea-c5138e18=608ca753-86c5-4e20-9c25-d67a789d9df8

title=Google&author.name=Rowling&genre.name=LOL&addBook=Add]

, и из-за этого у меня в базе данных 2 Роулинг. Потому что нет обновления, но вставьте вместо него (я имею в виду «Автор»)

Кстати, почему я получаю параметр «addBook = Add» в моем запросе? и как его удалить?

...