Редактирование ArrayList объектов с тегом struts 2 form
У меня есть 2 классы - Student
и Course
. Оба имеют все геттеры и сеттеры, определенные на атрибутах внутри них. Используя эти два класса, я пытаюсь построить веб-приложение с общими функциями, такими как редактирование и добавление студентов на разных страницах jsp. Я студент мог бы записаться на несколько курсов и оценки для каждого курса каждого студента должны быть доступны для редактирования внутри приложения.
Теперь у меня есть studentMarks.jsp
, который загружает данные из класса действий - StudentAction
public class StudentAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private List<Student> studentList;
private List<Course> courseList;
private HashMap<Student,List<Course>> studentCourseList;
private int rollNo;
private String name;
private String DOB;
StudentService studentService;
CourseService courseService;
Student student;
Course course;
/**** Setters and getters for all the attributes here **/
public String studentCourseList() {
this.studentList = studentService.getStudentRecords();
studentCourseList = new HashMap<Student, List<Course>>();
for(Student s : studentList) {
this.studentCourseList.put(s,courseService.getStudentCourses(s.getRollNo()));
}
return "SUCCESS";
}
public String editCoursePage() {
this.student = studentService.getStudent(rollNo);
this.courseList = courseService.getStudentCourses(rollNo);
return "SUCCESS"; //loads the editCourse.jsp
}
public String editCourseAction() {
System.out.print("This line displays null pointer exception" + courseList.size());
//courseService.editCourse(rollNo,this.courseList);
return "SUCCESS";
}
}
Первая страница загружается то, что выполняет studentCourseList действие, которое заполняет страницу всеми записями(эта страница работает нормально) и после каждой записи есть кнопка редактирования. При нажатии кнопки edit вызываетсяeditCoursePage , который устанавливает один объект student и получает список курсов для этого студента. Обратите внимание, что я не использую повторно список курсов из хэш-карты. На этой странице отметки учащихся отображаются вместе с отметками внутри текстовых полей для редактирования. Эта страница отображается правильная информация для студентов.
Эдиткурс.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Edit courses</title>
</head>
<body>
Student: <s:label value="%{student.name}" />
<s:form action="editCourseAction">
<s:hidden name="rollNo" value="%{student.rollNo}" />
Courses:
<s:iterator value="courseList" var="courses">
<s:label ><s:property value="name" /></s:label>
<s:textfield name="marks" theme="simple"/>
<br />
</s:iterator>
<s:submit action="editCourseAction" value="submit" />
</s:form>
</body>
</html>
Конечно.java
@Entity
@Table(name="courses")
public class Course {
@Id
@GeneratedValue
@Column(name="id")
int id;
@Column(name="marks")
int marks;
@Column(name="rollNo")
int rollNo;
@Column(name="course")
String course;
//all getters and setters
}
Теперь эта форма отображает правильные данные, но проблема заключается в том, что при отправке она не передает значения курсов обратно в editCourseAction. Я уже пробовал все виды выражений OGNL, которые могут заполнить список через форму, но не могут этого сделать. Это всегда через NPE, если я пытаюсь получить значение courseList в классе действий. Хотя это не так отправьте rollNo правильно.
Пожалуйста, скажи мне, что я делаю не так. Это проблема синтаксиса или неправильный подход ?1 ответ:
Если вы хотите отправить обратно в действие список объектов, вам нужно указать индекс в атрибуте
name
:Вместо
<s:iterator value="courseList"> <s:textfield name="marks" /> </s:iterator>
Использовать
<s:iterator value="courseList" status="ctr"> <s:textfield name="courseList[%{#ctr.index}].marks" /> </s:iterator>