SpringMVC之参数绑定(中)
接上篇文章
3、简单实体类型的绑定(使用简单对象接收参数)
假如说我们从前台传过来多个属性值,我们从后台一个一个接收,势必要在方法中定义多个形参,很是繁琐,并且有些公司编码规范中要求方法的形参不能超过5个,这时候我们就可以使用实体类接收参数。实际上,在开发中,大部分情况下,都是实体类。
创建一个Student实体类,这个类包含name,age属性:
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JSP页面:注意输入框的 name 属性值和上面 POJO 实体类的属性保持一致即可映射成功。
<form method="post" action="three">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
这样服务端后台就可以用一个对象Student接收数据方式,非常方便,如下:
@RequestMapping("/three")
public ModelAndView test3(Student student) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("name", student.getName());
mv.addObject("age", student.getAge());
mv.setViewName("showEasy");
return mv;
}
访问结果和之前是一样:
4、包装的实体类型的绑定(使用包装对象接收参数)
这个包装类型对象与上面普通的对象有啥区别呢?包装类型对象指的是对象中有另一个也是对象的属性,即对象套对象,为什么会设计这种对象呢?这种组合的设计方法对于后期程序的扩展很有用,比如复杂的查询条件就需要包装到这种包装类型中。
举一个例子,我们之前有一个学生对象,那么学生就肯定会有学校信息,而学校也封装成了一个对象,则学生中可以给定一个属性为学校的对象,相当于school对象作为了student的一个属性存在:
School对象如下:
public class School {
private String schoolName;// 学校名称
private String address;// 学校地址
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Student对象如下:
public class Student {
private String name;
private int age;
private School school; //school对象作为了student的一个属性,是一个对象属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
}
那么此时,jsp中新增的两个input中的schoolName和address的name属性值该怎么给呢?
这里我们使用对象.属性的形式,SpringMVC才可以识别:
form method="post" action="four">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
学校名称:<input type="text" name="school.schoolName"><br>
学校地址:<input type="text" name="school.address"><br>
<input type="submit" value="提交"><br>
</form>
对于的controller中修改为:
@RequestMapping("/four")
public ModelAndView test3(Student student) throws Exception{
ModelAndView mv = new ModelAndView();
mv.addObject("name", student.getName());
mv.addObject("age", student.getAge());
mv.addObject("schoolName", student.getSchool().getSchoolName());
mv.addObject("address", student.getSchool().getAddress());
mv.setViewName("showEasy");
return mv;
}
访问页面如下: