java - Spring MVC动态列表表单提交

标签 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
}

因此,当用户导航到特定的日程安排网页时,它将浏览类(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].descriptioncourse[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/

相关文章:

javascript - 使用 Ajax 验证表单时未定义

java 字节码 - 没有 ipush 指令

html - 圆 Angular 值末尾的边框虚线合并

html - 当您在其下方添加另一个 div 时,如何使框阴影保持不变?

javascript - 在 jquery/javascript 中组合两个脚本

javascript - 带 for 语句的空表单

forms - Angular 将选择值转换为 int

java - 强制停止线程

java - 应用于 Paragraph 的 itext spacingBefore 属性导致新页面

java - 使用合成器自定义外观 JPogressBar 和 JSplitPane xml