我有一个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>
答案 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并从数据库中加载客户信息,作为一个实体。但是,我认为你必须有充分的理由不想这样做)