Spring MVC - 从JSP提交对象

时间:2013-01-25 21:17:04

标签: java spring spring-mvc

我有一个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>

3 个答案:

答案 0 :(得分:3)

您可以使用Spring's form taglib而不是普通<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/

答案 1 :(得分: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

的建议编写控制器

答案 2 :(得分:0)

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

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