如何发送对象列表查看并返回到控制器中的Post方法
假设我有Person
类,我创build了一个Person
实例列表,并将这个列表添加到Model
。
List<Person> persons = new ArrayList<Person>(); model.addAttribute("persons",persons); return "savePersons";
在View
页面我有一个表单:
<form:form method="post" action="savePerson" modelAttribute="persons"> <c:forEach var="person" items="${persons}"> <form:input path="person.FName" name="FName" id="FName" value="" /> <form:input path="person.LName" name="LName" id="LName" value="" /> </c:forEach> <button type="submit"></button> </form:form>
当我点击提交button时,我想将Person List
绑定到控制器上的POST方法。
@RequestMapping(value = { "savePerson" }, method = RequestMethod.POST) public String savePerson(Model model, HttpServletRequest request, HttpSession session,@ModelAttribute("persons")List<Person> persons) { System.out.println(persons.length); return "success"; }
但是persons
列表不是POST
方法的绑定/获取。
有没有可能以这种方式绑定一个列表对象,或者是否有替代scheme呢?
我认为这个链接将帮助你设置你正在做的事情:
http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/
它看起来像你的forms,你需要修改它像这样的:
<form:form method="post" action="savePerson" modelAttribute="persons"> <c:forEach var="person" items="${persons}" varStatus="status"> <form:input path="person[${status.index}].FName" name="FName" id="FName" value="" /> <form:input path="person[${status.index}].LName" name="LName" id="LName" value="" /> </c:forEach>
这个SO问题有一个很好的例子可以帮助你: List <Foo>作为使用spring 3 mvc的表单支持对象,正确的语法?
正如Shri在他对ssn771的评论中所说的那样,如果你的绑定列表超过了256,那么它会给出错误
org.springframework.beans.InvalidPropertyException:bean类[com.app.MyPageListVO]的无效属性“mylist [256]”:属性path“mylist [256]”中的越界索引。 嵌套exception是java.lang.IndexOutOfBoundsException:索引:256,大小:256 org.springframework.beans.BeanWrapperImpl.getPrope rtyValue(BeanWrapperImpl.java:830)at …
发生此错误是因为默认情况下,256是数组和集合自动增长以避免OutOfMemoryErrors
限制,但是您可以通过在该控制器中设置@InitBinder中的WebDataBinder的@InitBinder
属性来增加此限制。
码:
@InitBinder public void initBinder(WebDataBinder dataBinder) { // this will allow 500 size of array. dataBinder.setAutoGrowCollectionLimit(500); }