Spring MVC动态列表表单提交

时间:2015-05-23 19:11:44

标签: java html forms spring-mvc

我有两个用于html表单提交的POJO。一个是包装ArrayList的包装器。

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].descriptioncourse[2].name/course[2].description,当spring填充课程的计划对象时,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"

但是Spring在ArrayList中填充的是3个Course对象,数组列表中的第二个是一个名称和描述都设置为null的课程对象。

1 个答案:

答案 0 :(得分:1)

你必须帮助Spring在Controller上执行它。当表单发送时,它应该发送如下内容:

[{&#34;名称&#34; :name,&#34; description&#34;:description},这里的第二个对象]

使用表单帖子URL的映射

到Controller方法。

可以让控制器方法通过@ModelAttribute和Schedule对象自动将上述内容映射到对象。 Spring不会关心索引的差距,因为它只关心对象是否正确发送以构建它,即如何发送一个课程对象。