Spring MVC:и два атрибута модели в одной форме - PullRequest
0 голосов
/ 26 февраля 2019

Я подготовил форму для работы с двумя моделями:

<form action="rentBook2" method="post">
        <table>
            <tbody>
                    <tr>
                    <spring:bind path="book.id">
                       <input value="${book.id}" type="hidden" name="id"/><br />
                    </spring:bind>

                    <spring:bind path="client.id">
                       <input value="${client.id}" type="hidden" name="id"/><br />
                    </spring:bind>

                    <td><label>Rental Date:</label></td>
                    <td>            
                    <spring:bind path="book.rentalDate">
                       <input type="text" name="rentalDate"/><br />
                    </spring:bind>

                    <tr>
                    <td><label>Return Date:</label></td>
                    <td>
                    <spring:bind path="book.returnDate">
                       <input type="text" name="returnDate"/><br />
                    </spring:bind>
                    </td>

                    <tr><td></td>
                        <td><input type="submit" value="Submit"/></td>
                    </tr>
            </tbody>
        </table>
        </form>

Для лучшего понимания: book.id и client.id скрыты, поскольку это значение уже передается методом get и параметром запроса в url изпредыстория

Но проблема в том, что я могу получить book.id, book.rentalDate и book.returnDate из книжного ввода.Что подключено, client.id имеет то же значение, что и book.id (что, конечно, неверно).

Это мой метод контроллера:

@PostMapping("/rentBook2")
public String rentBook2(@ModelAttribute("book") Book theBook, @ModelAttribute("client") Client theClient) {

    System.out.println("This is book in controller : " + theBook);
    System.out.println("This is client in controller : " + theClient);

    bookService.rentBook(theBook.getId(), theClient.getId());
    bookService.saveBook(theBook);

    return "redirect:/book/list-books";
}

И пример вывода из println:

This is book in controller : Book [id=19, title=null, author=null, genre=null, rentalDate=20-02-2019, returnDate=25-02-2019, client=null]
This is client in controller : Client [id=19, firstName=null, lastName=null, email=null]

Значение «19», которое вы видите выше, взято из $ {book.id}, но правильное значение для $ {client.id} должно быть «6».

Есть ли у вас идеи, почему book.id и client.id имеют одинаковое значение?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Мой совет - добавить временные переменные в любой из ваших классов, чтобы вы могли обрабатывать каждое значение с помощью одного атрибута модели (один объект нужного вам класса), а затем выполнять всю логику с этим объектом.

0 голосов
/ 26 февраля 2019

По рекомендации @M.Deinum, проблема заключалась в недостаточном количестве уникальных имен полей.Я перешел с id на idBook и с id на idClient, и механизм работает, как и ожидалось.

Спасибо @M.Deinum!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...