我正在尝试使用散列图来填充jsp中的文本字段,并通过我用来填充的相同散列图将操作类中的修改后的值恢复。尽管有许多不同的方法,但我没有这样做。我尝试发回一个对象列表,但我也失败了(见this thread)。我没有必要使用以下方法,但我只想通过struts标签将修改后的列表带回动作类。请帮助我,我已经浪费了很多时间。
动作类代码
private HashMap<String,Integer> coursesMarks;
//getters and setters
public String editCoursePage() {
this.student = studentService.getStudent(rollNo);
this.courseList = courseService.getStudentCourses(rollNo);
coursesMarks = new HashMap<String, Integer>();
for(Course c: courseList) {
coursesMarks.put(c.getCourse(), c.getMarks());
}
return ActionSupport.SUCCESS;
}
public String editCourseAction() {
System.out.print("inside of student action "
+ coursesMarks.size() + "\n\n\n");
return ActionSupport.SUCCESS;
}
在jsp内部
<s:form action="editCourseAction" validate="true">
Courses:
<s:iterator value="coursesMarks" status="st">
<s:label ><s:property value="course" /></s:label>
<s:textfield name="coursesMarks[%{#st.index}].value" theme="simple"/>
<br />
</s:iterator>
<s:submit action="editCourseAction" value="submit" />
</s:form>
运行此代码会引发此错误...
Mar 13, 2013 12:09:23 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at org.apache.struts2.components.IteratorComponent.end(IteratorComponent.java:334)
at org.apache.struts2.views.jsp.IteratorTag.doAfterBody(IteratorTag.java:87)
at org.apache.jsp.pages.editCourse_jsp._jspx_meth_s_005fiterator_005f0(editCourse_jsp.java:251)
at org.apache.jsp.pages.editCourse_jsp._jspx_meth_s_005fform_005f0(editCourse_jsp.java:174)
at org.apache.jsp.pages.editCourse_jsp._jspService(editCourse_jsp.java:104)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
.....and a long long list of error lines below this
如果我使用以下代码
<s:iterator value="coursesMarks" >
<s:label ><s:property value="course" /></s:label>
<s:textfield name="value" theme="simple"/>
它正确显示值,但不会将它们传递回动作类。你能否告诉我如何完成我的任务
答案 0 :(得分:3)
在JSP中迭代地图的键并在<s:textfield>
标记中使用键来获取值。你应该看起来像JSP:
<s:form action="editCourseAction" validate="true">
Courses:
<s:iterator value="coursesMarks.keys" var="coursekey">
<s:label ><s:property value="course" /></s:label>
<s:textfield name="coursesMarks['%{#coursekey}']" theme="simple"/>
<br />
</s:iterator>
<s:submit action="editCourseAction" value="submit" />
</s:form>
或者按照您的方式迭代地图,并使用key
关键字获取值。
<s:iterator value="coursesMarks">
<s:textfield name="coursesMarks['%{key}']" theme="simple"/>
</s:iterator>