Подтвердить что ты не робот

Как отправить список объектов для просмотра и возврата к методу Post в контроллере

Предположим, что у меня есть класс Person, я составил список экземпляров 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>

Когда я нажимаю кнопку отправки, я хочу привязать 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.

Возможно ли связать объекты списка таким образом или есть альтернатива для этого?

4b9b3361

Ответ 1

Я думаю, что эта ссылка поможет вам настроить то, что вы пытаетесь сделать:

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 имеет довольно хороший пример, который также может помочь вам: List <Foo> как объект поддержки формы с использованием spring 3 mvc, правильный синтаксис?

Ответ 2

Как сказал Шри в comment на ssn771 ответ, что если ваш список привязок больше 256, тогда он дает ошибку, например

org.springframework.beans.InvalidPropertyException: Недопустимое свойство 'mylist [256]' из bean class [com.app.MyPageListVO]: индекс из границы в пути свойств 'mylist [256]'; вложенное исключение java.lang.IndexOutOfBoundsException: Индекс: 256, Размер: 256 на org.springframework.beans.BeanWrapperImpl.getPrope rtyValue (BeanWrapperImpl.java:830) при...

Эта ошибка возникает из-за того, что по умолчанию 256 является пределом для автоматического роста и сбора коллекции, чтобы избежать OutOfMemoryErrors, но вы можете увеличить этот предел, установив свойство WebDataBinder AutoGrowCollectionLimit в @InitBinder в этом контроллере.

код:

@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    // this will allow 500 size of array.
    dataBinder.setAutoGrowCollectionLimit(500);
}