2

我有一个提供客户列表的 JSP(ArrayList searchResults)。我希望能够选择其中之一,并将其​​提交给 Spring MVC 控制器。但是,似乎我无法传递所选对象,只能传递它的一个属性,例如 customerId。我真的需要传递整个对象。

在 Spring 3.x 中有没有标准的方法来做到这一点?

<c:forEach items="${searchResults}" var="searchResult">
    <tr>
        <td><c:out value="${searchResult.customerId}" /></td>
        <td><c:out value="${searchResult.firstName}" /></td>
        <td><c:out value="${searchResult.lastName}" /></td>
        <td>
            <form method="POST" ACTION="./customercare">
                <input type="SUBMIT" value="Select This Customer"/>
                <input type="hidden" name ="searchResult" value="${searchResult}"/>
            </form>
        </td>
    </tr>
</c:forEach>
4

3 回答 3

4

您可以使用Spring 的formtaglib而不是 plain<form>来回发到 Spring MVC 控制器,然后它将值绑定回您指定的模型。

<form:form method="post" action="addContact.html">

<table>
<tr>
    <td><form:label path="firstname">First Name</form:label></td>
    <td><form:input path="firstname" /></td> 
</tr>

...

@RequestMapping(value = "/addContact", method = RequestMethod.POST)
public String addContact(@ModelAttribute("contact")
                        Contact contact, BindingResult result) {

看到这篇文章:http: //viralpatel.net/blogs/spring-3-mvc-handling-forms/

于 2013-01-25T21:21:39.163 回答
0

您可能需要考虑为每个标签和嵌套标签提供id以区分要发布的行

<c:forEach items="${searchResults}" var="searchResult">
    <tr> 
....
            <form:form id="${searchResults.key}-form" method="POST" ACTION="./customercare">
                <form:input id="${searchResults.key}-btn" type="SUBMIT" value="Select This Customer"/>
                <form:input id="${searchResults.key}-hidden" type="hidden" name ="${searchResults.key}" value="searchResult['${searchResults.key}']"/>
            </form:form>

    </tr>

在后端,您必须按照@PatBurke 的建议编写控制器

于 2013-01-25T21:42:02.967 回答
0

每个客户可以有 1 个表单,其中包含很多隐藏的输入。选择该客户后,您可以发布该表单。然后 Spring 可以将所有隐藏的输入绑定到您的客户对象。

(通常,我只会发送 id 并将客户信息作为实体从数据库加载。但是,我认为您必须有充分的理由不想这样做)

于 2013-01-26T17:33:23.017 回答