簡體   English   中英

如何從JSP中的循環將Spring MVC模型傳遞給控制器

[英]How to pass Spring MVC model to controller from a loop in JSP

關於Spring MVC和JSP。

我的JSP遍歷用戶列表。 每個用戶都顯示在表格的一行中。

每行上都有一個“編輯”和“刪除”按鈕。

當單擊任一按鈕時,我想調用關聯的控制器方法,並為關聯的行傳遞用戶模型

為此,我在循環中添加了一個表單。 但是,當我單擊按鈕時,控制器中的用戶模型值始終為null。

  • 注意:我知道我可以通過使用模型的ID來做到這一點,但我正在嘗試傳遞模型本身。 如果不可能的話,我想了解為什么不這樣做。

這是我的控制器方法:

@RequestMapping(value = "/user/delete", method = RequestMethod.POST)
public ModelAndView deleteUser(@ModelAttribute("user") User user) {
    ....
}

這是我的JSP

<c:forEach var="user" items="${users}">
    <form:form action="/" id="user${user.id}Form" method="post" commandName="user">
        <tr>
            <td class="col-xs-8 col-sm-8 col-md-8 col-lg-8">${user.id}: ${user.firstName} ${user.lastName}</td>
            <td class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
                <div class="btn-toolbar pull-right" role="btn-toolbar">
                    <div class="btn-group" role="group">
                        <input class="btn btn-default btn-default"
                               type="Submit"
                               value="Edit"
                               id="${user.id}"
                               onclick="document.getElementById('user${user.id}Form').action='${pageContext.request.contextPath}/user/updateLoad'">
                    </div>
                    <div class="btn-group" role="group">
                        <input class="btn btn-default btn-default"
                               type="Submit"
                               value="Delete"
                               id="${user.id}"
                               onclick="document.getElementById('user${user.id}Form').action='${pageContext.request.contextPath}/user/delete'">
                    </div>
                </div>
            </td>
        </tr>
    </form:form>
</c:forEach>

為了將用戶模型傳遞給控制器​​,我需要做什么?

如果執行以下操作,則可以在控制器中獲取值,但是由於開銷,我不認為這是實用的解決方案。

    <c:forEach var="user" items="${users}">
        <form:form action="/" id="user${user.id}Form" method="post" commandName="user">
            <input type="hidden" name="id" value="${user.id}"/>
            <input type="hidden" name="firstName" value="${user.firstName}"/>
            <input type="hidden" name="lastName" value="${user.lastName}"/>
            <input type="hidden" name="phone" value="${user.phone}"/>
            <input type="hidden" name="address" value="${user.address}"/>

方法參數上的@ModelAttribute指示應從模型中檢索參數。 如果模型中不存在該參數,則應首先實例化該參數,然后將其添加到模型中。 一旦出現在模型中,則應從具有匹配名稱的所有請求參數中填充參數的字段。

WebDataBinder類按名稱將請求參數名稱與模型屬性字段進行匹配。 在必要時應用類型轉換(從String到目標字段類型)后,將填充匹配字段。

您的情況:

1.Spring首先創建Model User實例(如果未實例化),然后嘗試綁定數據。 對?

2.現在的問題是,在您的情況下,spring將如何按名稱將請求參數名稱與模型屬性字段進行匹配?

Spring創建了實例,但是在綁定數據時失敗,因此您將獲得一個空實例。 這就是使用此方法無法完成的原因。

我認為執行此操作的唯一方法是使用已經在問題中發布的第二種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM