Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP-添加一个不在modelAttribute上的表单参数_Java_Jsp_Spring Mvc - Fatal编程技术网

Java JSP-添加一个不在modelAttribute上的表单参数

Java JSP-添加一个不在modelAttribute上的表单参数,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,我有一个表格,用于映射学生信息以供搜索 我还想添加课程号作为搜索条件。课程编号通过注册与学生相关 由于学生类上不存在课程号,因此仅将学生作为modelAttribute发送不会将课程号发送给控制器 因此,我想知道什么是最好的方式发送课程号控制器以及 如有任何建议,我们将不胜感激 代码段JSP文件: <form:form method="POST" action="/tar/sisStudentSearch" commandName="student"> <tab

我有一个表格,用于映射学生信息以供搜索

我还想添加课程号作为搜索条件。课程编号通过注册与学生相关

由于学生类上不存在课程号,因此仅将学生作为modelAttribute发送不会将课程号发送给控制器

因此,我想知道什么是最好的方式发送课程号控制器以及

如有任何建议,我们将不胜感激

代码段JSP文件:

<form:form method="POST" action="/tar/sisStudentSearch"
    commandName="student">
    <table class ="layoutBodyTable border">
        //...
                            <td class="label_r">First Name:</td>
                            <td><input type="text" name="firstName" maxlength="100" size="50" /></td>
                            <td class="label_r">Surname:</td>
                            <td><input type="text"  name="familyName" maxlength="100" size="50" /></td>

                        </tr>
                        <tr>
                            <td class="label_r"  alt="Gender">Gender:</td>
                            <td><input type="text" name="sexCode" maxlength="1" size="1" /></td>
                            <td class="label_r"  alt="Date of birth">Date of Birth:</td>
                            <td><input type="text" maxlength="10" size="10" /></td>
                        </tr>
                        <tr>
                            <td class="label_r">College No:</td>
                            <td><input type="text" maxlength="3" size="3" /></td>
                            <td class="label_r">Course No:</td>
                            <td><input type="text" id="courseNo" name="enrolments.courseNo" maxlength="5" size="5" />
                            //...
</form:form>

//...
名字:
姓:
性别:
出生日期:
学院编号:
课程编号:
//...
代码段控制器:

public class StudentSearchController {

    @Autowired
    StudentService studentService;


    @RequestMapping(value = "/sisStudentSearch", method = RequestMethod.POST)
    public ModelAndView searchStudents(@ModelAttribute("student") Student student,
            Map<String, Object> map, HttpServletRequest request) {

        List<Student> students = new ArrayList<Student>();
        // StudentService userService = new StudentService();
        Logger.getLogger(StudentSearchController.class).info("Student id received as parameter: " + student.getStudentNo());


            students = studentService.findStudents(student);        
            if (students!= null && !students.isEmpty()){
                Logger.getLogger(StudentSearchController.class).info("Students found ! First name: " + students.get(0).getFirstName());
            }
        }
        ModelAndView modelAndView = new ModelAndView("sisStudent");
        modelAndView.addObject("students", students);
        return modelAndView;

    }   

}
公共课堂学生搜索控制器{
@自动连线
学生服务学生服务;
@RequestMapping(value=“/sisStudentSearch”,method=RequestMethod.POST)
公共模型和视图搜索学生(@modeldattribute(“学生”)学生,
映射映射,HttpServletRequest请求){
List students=new ArrayList();
//StudentService userService=新的StudentService();
getLogger.getLogger(StudentSearchController.class).info(“作为参数接收的学生id:”+Student.getStudentNo());
学生=学生服务。查找学生(学生);
if(students!=null&&!students.isEmpty()){
getLogger.getLogger(StudentSearchController.class).info(“找到的学生!名字:”+Students.get(0.getFirstName());
}
}
ModelAndView ModelAndView=新的ModelAndView(“SISSudent”);
添加对象(“学生”,学生);
返回模型和视图;
}   
}

尝试使用习惯的模型,我希望您不要将实体用作模型对象,因为这不是一个好的做法:

public class StudentModel{
    private String name;
    //other attributes
    private String courseId;
    // GETTERS and SETTERS for all the fields
}
PS:您可以使用
@Max
@Min
作为模型属性的验证

您的控制器:

public class StudentSearchController {

     @Autowired
     StudentService studentService;


     // added this assuming that you need courses from database
     @Autowired
     CourseService courseService;
     StudentModel studentmodel;

      @RequestMapping(method = RequestMethod.GET)
      public ModelAndView init() {
               studentmodel = new StudentModel();
               ModelAndView modelAndView = new ModelAndView();
               //assuming that your seach page is named studentpage
               List<Course> courses  = courseService.findCourses(..);
               modelAndView.addObject("student", studentmodel );  
               modelAndView.addObject("courses", courses);  
               //OR
               modelAndView.addObject("enrolments",courseService.findTheCourseYouNeed(..));
               // any other logic
       return modelAndView;
       }

      @RequestMapping(value = "/sisStudentSearch", method = RequestMethod.POST)
     public ModelAndView searchStudents(@ModelAttribute("student") StudentModel student,
                    Map<String, Object> map, HttpServletRequest request) {
                //here you can acess your courseNumber from StudentModel student
               // Apply you logic by calling the studentService filter method that gets attributs from the model
                ModelAndView modelAndView = new ModelAndView("sisStudent");
                modelAndView.addObject("students", students);
                return modelAndView;

     }   
}
公共课堂学生搜索控制器{
@自动连线
学生服务学生服务;
//假设您需要数据库中的课程,则添加此选项
@自动连线
课程服务课程服务;
学生模型;
@RequestMapping(method=RequestMethod.GET)
公共模型和视图初始化(){
studentmodel=新studentmodel();
ModelAndView ModelAndView=新建ModelAndView();
//假设您的搜索页面名为studentpage
列出课程=courseService.findCourses(..);
添加对象(“学生”,学生模型);
添加对象(“课程”,课程);
//或
modelAndView.addObject(“注册”,courseService.FindCourseyouneed(..);
//还有其他逻辑吗
返回模型和视图;
}
@RequestMapping(value=“/sisStudentSearch”,method=RequestMethod.POST)
公共模型和视图搜索学生(@modeldattribute(“学生”)学生模型学生,
映射映射,HttpServletRequest请求){
//在这里,您可以从StudentModel学生访问您的课程编号
//通过调用从模型中获取属性的studentService筛选器方法应用您的逻辑
ModelAndView ModelAndView=新的ModelAndView(“SISSudent”);
添加对象(“学生”,学生);
返回模型和视图;
}   
}
在JSP中:

将输入值指定给courseNo,或按courseId的值使用select and option

<td><input type="text" id="courseNo" name="courseId" value="${enrolments.courseNo}"/>


它必须被发送,请尝试在控制器中读取
request.getParameter(“courseNo”)
发送的是它的名称,而不是id,所以它应该是
request.getParameter(“enrolments.courseNo”)非常感谢ShadowRay。我认为这解释了我在映射中遇到的许多问题。事实上,我发布这个问题正是因为我觉得有些地方出了问题,而你的回答是我不应该将实体映射为模型。这正是我在阅读SpringMVC时所理解的应该做的。我需要再读一遍我的材料,看看我为什么会有这样的误解。再次感谢!欢迎:)至于材料,我推荐《行动中的春天》第三版,这是一本好书