我有两个用于 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
}
因此,当用户导航到特定的日程安排网页时,它将浏览类(class)并将它们显示为可编辑的文本字段
<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 从 View 中删除特定类(class)。
假设我要显示 3 门类(class),我决定删除中间的类(class)。提交时剩下的两门类(class)将发布为 course.[0].name/course.[0].description
和 course[2].name/course[2].description
并且当 spring 填充类(class)的 schedule 对象时,ArrayList
中的第二个索引将是一个 Course 对象,所有值都设置为 null。
我想知道如何防止这种情况发生。 Spring 可以为我过滤掉它还是我必须在 Controller 中自己做?
谢谢。
所以我的发帖请求是这样的:
类(class)[0].name = "类(class) 1"
courses[0].description = "类(class) 1 的描述"
类(class)[2].name = "类(class) 3"
courses[2].description = "类(class) 3 的描述"
但是 Spring 在 ArrayList 中为我填充的是 3 个 Course 对象,数组列表中的第二个是名称和描述都设置为 null 的类(class)对象。
最佳答案
你必须帮助 Spring 在 Controller 上完成它。发送表单时,它应该发送如下内容:
[{"name":name,"description":description}, 第二个对象在这里]
到具有表单发布 URL 映射的 Controller 方法。
可以让 Controller 方法通过@ModelAttribute 和您的 Schedule 对象将上述内容自动映射到一个对象。 Spring 不会关心索引的差距,因为它只关心对象是否正确发送以构建它,即如何发送类(class)对象。
关于java - Spring MVC动态列表表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416594/