2013-03-13 2 views
1

Я пытаюсь использовать хэш-файл для заполнения текстовых полей в jsp и возвращать измененные значения в классе действий через тот же hashmap, который я использовал для заполнения. Несмотря на множество разных подходов, я не могу этого сделать. Я попытался отправить список объектов, но я тоже ошибся (см. this thread). Не нужно, чтобы я использовал следующий подход, но Я просто хочу вернуть измененный список обратно к классу действий через теги расположений. Пожалуйста, помогите мне в этом, я уже потратил много времени на это.java.util.ConcurrentModificationException при итерации по хэш-карте с помощью struts iterator

класс Действие Код

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; 
    } 

Внутри СПЯ

<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

У вас есть геттеры и сеттеры для этого текстового поля, если у вас есть то, что является именем текстового поля, это значение? –

+0

геттеры и сеттеры, для которых поля? У меня есть getters и ssetters для моего hashmap, и он отлично читает значения. То, что я хочу сделать, это записать значения обратно ... – ishan

+0

для текстовых полей в вашем итераторе, что это за элемент, у вас есть сеттеры для текстовых полей –

ответ

2

В 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> 
+0

Ну, это сработало. Большое спасибо александр. Вы помогли мне дважды через два дня;) – ishan

Смежные вопросы