java—如何在jsp中使用spring窗体标记访问动态对象列表中的字段

chhkpiq4  于 2021-07-15  发布在  Java
关注(0)|答案(0)|浏览(255)

我尝试在jsp视图中使用spring表单标记。被引用的窗体有一个包含其属性的对象列表。我尝试在对象列表上使用spring表单标记来引用它的各个字段,其中一个作为下拉列表,另一个作为复选框。
我的表单类中有一个带有get和set的标准项目列表。

private List<CourseItem> courseItems = new ArrayList<CourseItem>();

public List<CourseItem> getCourseItems() {
    return this.courseItems;
}
public void setCourseItem(final List<CourseItem> courseItems) {
    this.CourseItems= courseItems;
}

courseitem是一个简单的类,复选框为boolean of currentcourse,下拉列表为string coursename。视图的构建是为了简单地遍历courseitems列表并显示它们。

<c:forEach var="courseItem" items="${courseItems}" varStatus = "status">
        <c:set var="courseItem" value="${courseItem}" scope="request"/>
        <c:set var="courseItemIndex" value="${status.index}" scope="request"/>
    </c:if>
</c:forEach>

然后,对于每个课程,显示下面的字段(课程名称的列表在其他地方单独传递)。我的问题是关于路径名,引用每个courseitem单独表单属性的正确方法是什么?我在数据库中构建的任何预先存在的记录都将正确填充,但由于绑定问题,尝试添加新课程项将无法生成。

<td>
    <form:select path="courseItems[${courseItemIndex}].courseName ">
        <form:options items="${courseNames}" itemLabel="name" itemValue="id"/>
    </form:select>
</td>
<td>
    <form:checkbox path="courseItems[${courseItemIndex}].historic"/>
</td>

现在,在控制器中尝试从方法添加新课程时,相关部分是我传递courseindex并传递一个新的courseitem。

CourseItem courseItem = new CourseItem();
map.addAttribute("courseItem", courseItem);
map.addAttribute("courseItemIndex", courseItemIndex);

现在当这个被触发时,我得到了一个错误。无论当前课程指数是什么。

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'courseItems[X]' available as request attribute
org.springframework.web.servlet.support.BindStatus <init> BindStatus.java 144

所以很明显我的课程表是不可用的。在这种情况下,如果在我的控制器中创建新的课程方法,我是否需要传递属于窗体的课程列表?如果是这样的话,怎样才能正确地引用它呢。我似乎被困在如何处理这些动态对象列表以及如何通过spring表单标记引用它们的属性上。谢谢你的帮助。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题