我按照http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/中的代码将对象列表发布到Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。
我发现an answer表示在WebDataBinder中设置setAutoGrowCollectionLimit可以解决这个问题。所以在我的控制器中我做了:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(2048);
}
@RequestMapping(value="/upload", method=RequestMethod.POST)
public String postData(Model model){
List<Products> products = //Some processing to get products list
ProductList productList = new ProductList();
productList.setProducts(products);
System.out.println(“Total records loaded: "+products.size());
model.addAttribute("productform", productList);
return “upload”;
}
@RequestMapping(value=“/process”, method=RequestMethod.POST)
public String uploadProcessedData(@ModelAttribute("productform") ProductList productList){
System.out.println(“Total records received: “+productList.getProducts().size());
return "upload";
}
我的JSP代码:
<form:form method="post" action="${pageContext.request.contextPath}/process” modelAttribute="productform">
<table>
<tr>
<th>Record</th>
<th>name</th>
</tr>
<c:forEach var="product" items="${productform.products}" varStatus="status">
<tr>
<td><c:out value="${status.index + 1}" /></td>
<td><input name="products[${status.index}].name” value="${product.name}”/></td>
</tr>
</c:forEach>
</table>
<input type="submit" value="Save" />
</form:form>
但是,我的表单有1000多条记录,控制器只接收556条记录。为什么这个号码?这是因为任何尺寸限制?如何让Spring加载所有1000多条记录。
答案 0 :(得分:2)
您可能希望在表单标记中为大量数据添加enctype=multipart/form-data
,尤其是在有效负载中包含非ASCII字符时。这可能会以块的形式发送大量数据。