当前位置: 首页 > 知识库问答 >
问题:

如何在控制器中将对象列表发送到视图并返回到Post方法

慕容宇
2023-03-14

假设我有 Person,我创建了一个 Person 实例列表,并将此列表添加到模型中

List<Person> persons = new ArrayList<Person>();
model.addAttribute("persons",persons);
return "savePersons";

在< code >视图页面中,我有一个表单:

<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>

当我单击提交按钮时,我想将< code >人员列表绑定到控制器上的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";
}

但是< code>persons列表没有在< code>POST方法中绑定/获取。

是否可以以这种方式绑定列表对象,或者是否有替代方法?

共有2个答案

郭通
2023-03-14

正如Shri在他对ssn771的评论中提到的,如果你的绑定列表多于256,那么它会给出如下错误

org . spring framework . beans . invalidpropertyexception:bean类[com.app.MyPageListVO]的无效属性“mylist[256]”:属性路径“mylist[256]”中的越界索引嵌套异常是Java . lang . indexoutofboundsexception:Index:256,Size:256 at org . spring framework . beans . beanwarperimpl . getprope rty value(beanwarperimpl . Java:830)at...

发生此错误是因为默认情况下,256是数组和集合自动增长的限制,以避免< code>OutOfMemoryErrors,但您可以通过在该控制器的< code>@InitBinder中设置WebDataBinder的AutoGrowCollectionLimit属性来增加此限制。

代码:

@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    // this will allow 500 size of array.
    dataBinder.setAutoGrowCollectionLimit(500);
}
唐骏祥
2023-03-14

我认为这个链接会帮助你建立你想要做的事情:

http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/

在您的表单中,您似乎需要将其修改为:

<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问题有一个非常好的例子,也可能对你有所帮助:列表

 类似资料:
  • 我的视图中有一个向控制器发送对象的表单,但问题是,如果我发送的对象超过256个,就会出现异常: 所以我在想为什么会有这样的限制,于是我找到了这个话题:https://stackoverflow.com/a/24699008/4173394 但它似乎对我不起作用(可能是我的一个坏习惯)。 下面是我的结构:我的视图名为createUpdate.vm,并像这样发布我的表单: 我在FollowerFile

  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t

  • 我遵循了http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/将对象列表发布到我的Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。 我找到了一个答案,它说在WebDataBinder中设置setAuto就可以解决这个问题。所以在我的控制器中,我

  • 我有窗体和相应的控制器,对象列表被传递给它们。 实体类: 控制器: 形式: 我假设表单中的百里叶th:each循环变量不能是th:object=${ent2}(因为如果我这样做,select form返回null)。而th:value="${ent2.name}返回字符串值。所以我不得不将@RequestParam(th:value)发送给“save”方法。但是在这种情况下,我必须对数据库进行额外

  • 如何通过Ajax调用将jsonArray发布到spring控制器?? 这是我的JSON数组想通过这个!!

  • seleccion“对象它是一个实体,具有我从Ajax发送的JSON的一些属性,”seleccionados“是一个列表,保存接收到的数组,但当我发送它时,obj参数总是返回一个空对象,Ajax发送错误函数,我认为问题是我在向对象发送数组,但我不知道如何解决它 选择对象模型: