2015-05-23 4 views
2

У меня есть два POJO, используемых для отправки html-формы. Один из них - обертка для обертывания ArrayList.Spring MVC dynamic list form submit

public Class Schedule { 
    private List<Course> courses; 
    // Getter & Setters for courses 
} 

public Class Course { 
    private String name; 
    private String description; 
    // Getter & Setters for both variables 
} 

Таким образом, когда пользователь переходит к определенному расписанию веб-странице он будет выглядеть через курсы и отображать их в виде редактируемых текстовых полей

<form method="post"> 
    <c:forEach var="course" varStatus="status" items="${schedule.courses}> 
     <div id="${course.id}"> 
      <input type="text" value="${course.name} name="course[${status.index}].name" /> 
      <input type="text" value="${course.description} name="course[${status.index}].description" /> 
      <input type="button" value="Delete"/> 
     </div> 
    </c:forEach> 
    <input type="submit" value="Submit"/> 
</form> 

И я JavaScript для удаления конкретного курса с точки зрения когда они нажимают кнопку удаления, которую я не буду перечислять.

Скажем, я показываю 3 курса, и я решил удалить средний. Два оставшихся курса будут отправлены как course.[0].name/course.[0].description и course[2].name/course[2].description, а когда весна заполняет объект расписания для курсов, вторым индексом в ArrayList будет объект курса со всеми значениями, установленными в null.

Мне было интересно, как я могу предотвратить это. Может ли фильтр Spring использовать это для меня или я должен сам это сделать в контроллере?

Спасибо.

Так что мой пост запрос выглядит следующим образом: courses[0].name = "course 1" courses[0].description = "description for course 1" courses[2].name = "course 3" courses[2].description = "description for courses 3"

Но что весна заполнит меня в ArrayList 3 объектов курса, второй в списке массива является объектом конечно как с именем и описанием, установленным в ноль.

+0

Что произойдет, когда при удалении (в JS) вы также «перекомпостируете» индексы, т. Е. После этого у вас будет только курс [0] и курс [1]? – sodik

ответ

1

Вы должны помочь Spring сделать это на Controller.When форма отправляется он должен послать что-то вроде:

[{ «Имя»: имя, «Описание»: описание}, второй объект здесь]

Метод контроллера с отображением URL-адреса формы.

Возможно, что метод контроллера автоматически сопоставляет вышеуказанное с объектом через @ModelAttribute и объект Schedule. Весна не заботится о разрыве индекса, потому что он будет заботиться только о том, чтобы объект был правильно отправлен для его создания, т.е. как вы отправляете объект курса.

+0

Я забыл упомянуть, что я использую ModelAttribute для его отображения. Мне просто не нравится тот факт, что когда у меня есть пробел и отправьте его Spring, Spring представляет пробел как экземпляр объекта со всеми свойствами в объекте null. Я просто хочу, чтобы Spring даже не включил этот объект. –

+0

, это произойдет только в том случае, если вы не полностью удалите соответствующий div в своем JSP-файле перед его отправкой. Spring не может отобразить что-то, что не существует. Это отображение null для вас, потому что объект/div по-прежнему находится в форме, когда его отправлено так его отображение. – Asura

+0

Я проверил сообщение и разместил следующие данные: Курсы [0] .name = "курс 1" курсы [0] .description = "описание программы курса 1" курсы [2] .name = "курс 3 " курсы [2] .description =" описание для курсов 3 "' , но все же мой список массивов имеет 3 объекта –