我尝试在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表单标记引用它们的属性上。谢谢你的帮助。
暂无答案!
目前还没有任何答案,快来回答吧!