2

ハッシュマップを使用してjspのテキストフィールドにデータを入力し、データの入力に使用したのと同じハッシュマップを使用して、アクションクラスの変更された値を元に戻そうとしています。多くの異なるアプローチにもかかわらず、私はそうすることに失敗しています。オブジェクトリストを返送しようとしましたが、失敗しました(このスレッドを参照)。次のアプローチを使用する必要はありませんが、変更されたリストを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"/>

値は正しく表示されますが、アクションクラスには戻されません。私の仕事を遂行する方法を教えてください

4

1 に答える 1

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>
于 2013-03-13T09:37:00.837 に答える