【问题标题】:how to pass two lists in two dropboxes in one form如何以一种形式在两个保管箱中传递两个列表
【发布时间】:2017-09-28 12:54:28
【问题描述】:

我正在尝试将两个列表(学生和课程)从 Controller 传递到 jsp 文件。它应该是两个 Dropbox,一个表单和一个提交按钮。现在我只能通过一个列表。想法是从一个保管箱中选择学生,从另一个保管箱中选择几门课程并提交注册。这是我的控制器,两个类:学生、课程和 jsp 文件。谢谢!

班级学生

@Entity
@Table(name = "students")
public class Student {

@Id
@GeneratedValue
@Column(name = "STUDENT_ID")
private int studentId;

@Column(name = "name")
private String name;

@ManyToMany(cascade = CascadeType.ALL )
@JoinTable(name="STUDENT_COURSE", joinColumns={ @JoinColumn(name="STUDENT_ID")},
        inverseJoinColumns = { @JoinColumn(name = "COURSE_ID") })
private Set<Course> courses = new HashSet<Course>();

public Student() {
}

public Student(String name) {
    this.name = name;
}

public Student(String name, Set<Course> courses) {
    this.name = name;
    this.courses = courses;
}


public int getStudentId() {
    return studentId;
}

public void setStudentId(int studentId) {
    this.studentId = studentId;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            '}';
}

}

课堂课程

@Entity
@Table(name = "courses")
public class Course {

@Id
@GeneratedValue
@Column(name = "COURSE_ID")
private int courseId;

@Column(name = "name")
private String courseName;

public Course() {
}

public Course(String courseName) {
    this.courseName = courseName;
}

public String getCourseName() {
    return courseName;
}

public void setCourseName(String courseName) {
    this.courseName = courseName;
}

public int getCourseId() {
    return courseId;
}

public void setCourseId(int courseId) {
    this.courseId = courseId;
}

@Override
public String toString() {
    return "Course{" +
            "courseName='" + courseName + '\'' +
            '}';
}

}

注册控制器

@Controller
public class RegistrationController {

@Autowired
private StudentService studentService;
@Autowired
private CourseService courseService;


@RequestMapping(value = "/register")
public String showRegister(Model model){

    Student student = new Student();
    Course course = new Course();
    model.addAttribute("student", student);
    model.addAttribute("course", course);
    List<Student> students = studentService.showAllStudents();
    model.addAttribute("students", students);
    List<Course> courses = courseService.showAllCourses();
    model.addAttribute("courses", courses);

    return "registration";
} .   

registration.jsp

<%@ taglib prefix="form" 
uri="http://www.springframework.org/tags/form"%>
<html>

<title>Spring MVC dropdown box</title>

<h2>Select student</h2>



<form:form  method="POST" action ="register" commandName="student">

    <table>

        <tr>

            <td>Please select:</td>

            <td><form:select path="name" >

                  <form:option value="" label="student" />

                  <form:options items="${students}" />

                   </form:select>

                          </td>

            <td><form:errors path="name" cssStyle="color: #ff0000;" /></td>

        </tr>

        <tr>

            <td><input type="submit" name="submit" value="Submit"></td>

        </tr>



    </table>

</form:form>

.

【问题讨论】:

  • 您可以为课程创建另一个&lt;form:select
  • 我当然先尝试过,但是我该怎么处理commandName?如果我选择学生或课程,则会引发异常。
  • 我相信我们正在使用 commandName 在控制器和视图之间传递一个对象。那么这里如何传递两个对象呢?
  • 我认为你不需要使用commandName

标签: java html jsp spring-mvc


【解决方案1】:

您可以为课程创建另一个&lt;form:select 并删除commandName,因为您可以将studentscourses 作为HTTP 参数发送,然后可以从控制器中的HTTPSerlvetRequest 对象中检索这些参数。

更新:最好创建一个简单的 &lt;form&gt; 而不是 Spring &lt;form:form&gt;,因为这特别适合将表单绑定到一个 POJO。

【讨论】:

  • 谢谢@alayor,但我需要在下拉框中查看这些列表,因此我需要将它们从 Controller 传递给 jsp 文件。如果我删除 commandName 它会引发异常。
  • 它抛出了哪个异常?
  • java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'command' available as request attribute,我又不想将它们传递给控制器​​,我希望将它们从控制器传递给视图表单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多