我有一个Spring MVC应用程序,我想知道如何成功地将我的JSP页面中具有相同名称的多个 动态 表单元素映射到我的对象类。例如:
在我的locations.jsp页面中,我有多个下拉框:
<form id="tabs-3-form">
<input id="locations-1" name="location" />
<input id="locations-2" name="location" />
<input id="locations-3" name="location" />
... (more can be added or deleted dynamically by user)
</form>
我正在使用jQuery将表单发布到我的控制器:
$("#tabs-3-form").submit(function() {
$.ajax({
type: 'POST',
url: '/searchResults',
data: $(this).serialize(),
dataType: 'json',
success: function(data) {
...
}
});
return false;
});
我的LocationsController.java设置如下:
@RequestMapping(value = "/locationResults", method = RequestMethod.POST)
public @ResponseBody LocationsCollection locationsCollection
(
@ModelAttribute(value = "location") Location location,
BindingResult result
)
{
LocationsCollection locationsCollection = new LocationsCollection();
locationsCollection.addLocation(location);
// Anything else to do here?
return locationsCollection;
}
LocationsCollection.java
只包含Location
个对象列表。
我是否需要在输入字段的名称中添加括号? MVC是否会自动映射到List,就像其他表单元素一样?如果有人能提供一个例子,我会很感激。
答案 0 :(得分:3)
<input name="locationList[0].locationName" />
而不是文章建议:
<input name="myFormObject.elements[0].property" />
答案 1 :(得分:-1)
如果您对表单元素使用相同的名称,我认为您需要使用括号。
<c:forEach items="${expenseForm.expenseDetails}" varStatus="i">
<tr id="expenseDetail_${i.index}" class="lineItemsClass" lineNum="${i.index}">
<td><form:input path="expenseDetails[${i.index}].description" cssStyle="width: 200px;" /> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].description" /></label></td>
<td><form:input path="expenseDetails[${i.index}].quantity" cssStyle="width: 60px;" readonly="true"/> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].quantity" /></label></td>
<td><form:input path="expenseDetails[${i.index}].unitPrice" cssStyle="width: 60px;" readonly="true"/> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].unitPrice" /></label></td>
<td><form:input path="expenseDetails[${i.index}].total" cssStyle="width: 60px;" /> <label style="color: red;"><form:errors path="expenseDetails[${i.index}].total" /></label></td>
</tr>
</c:forEach>
这里的expenseDetails是modelAttribute类中的列表。 路径名将用作html表单名称,并将基于索引编制。 上面的代码段对我来说很好。