繁体   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