Spring MVC:<spring:bind>和两个模型属性以一种形式

时间:2019-02-26 13:52:30

标签: java spring forms spring-mvc jsp

我已经准备好处理两个模型的表格:

<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 :(得分:0)

@M建议。 Deinum,问题出在唯一字段名称不足。我从id更改为idBook,从id更改为idClient,该机制按预期工作。

感谢@M。 Deinum!

答案 1 :(得分:0)

我的建议是将瞬态变量添加到您的任何类中,以便您可以通过一个模型属性(所需类的一个对象)处理每个值,然后对该对象执行所有逻辑。