SpringMVC框架学习之参数绑定(下)
除了前面两章介绍的参数绑定外,SpringMVC还可以进行一些高级参数的绑定,比如数组、List、Map等:
5、绑定数组类型
在实际开发中,如果前端请求需要传递多个相同名称的参数值时,在控制类中的处理方法使用数组进行接收。
比如:每个学生前有一个checkbok,选中多个学生后点击删除按钮需要把所有学生的id传递给Controller,这时就可以使用数据来接收参数。
(1)、直接在方法形参里面,定义一个同名的数组接收
前端页面:
<body>
<form action="delete" method="post">
<table width="30%" border="1">
<tr>
<td>选择</td>
<td>学生</td>
</tr>
<tr>
<td><input name="ids" value="1" type="checkbox"/></td>
<td>乔峰</td>
</tr>
<tr>
<td><input name="ids" value="2" type="checkbox"/></td>
<td>段誉</td>
</tr>
<tr>
<td><input name="ids" value="3" type="checkbox"/></td>
<td>虚竹</td>
</tr>
</table>
<input type="submit" value="删除">
</form>
</body>
选择多个学生后点击删除提交至后台:
后台使用一个名称为ids的数组接受前台传来的多个值:
@Controller
public class MyController3 {
@RequestMapping("/delete")
public void deleteStudents(Integer[] ids){
for (int i = 0; i <ids.length ; i++) {
System.out.println(ids[i]);
}
}
}
控制台输出如下:
(2)、将数组放入对象中作为属性存在
需要保证属性名必须和必须和请求参数的名称一致:
Student对象:
public class Student {
private Integer[] ids;
private String name;
private int age;
get/set方法
Controller方法中使用对象接受参数,效果和上面一样:
@RequestMapping("/delete2")
public void deleteStudents2(Student student){
Integer[] ids = student.getIds();
for (int i = 0; i <ids.length ; i++) {
System.out.println(ids[i]);
}
}
6、绑定List类型
List类型不能直接在方法中使用去接受,如果需要使用 List 集合接收前端传来的数据,List 集合本身需要放在一个封装对象中,这个时候,List 中,可以是基本数据类型,也可以是对象。
例如有一个班级类,班级里边有学生,学生有多个:
班级MyClass:
public class MyClass {
private Integer id;
private List<Student> students;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "MyClass{" +
"id=" + id +
", students=" + students +
'}';
}
}
添加班级的时候,可以传递多个 Student,前端页面写法如下:
<form action="addclass" method="post">
<table>
<tr>
<td>班级编号:</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>学生编号:</td>
<td><input type="text" name="students[0].age"></td>
</tr>
<tr>
<td>学生姓名:</td>
<td><input type="text" name="students[0].name"></td>
</tr>
<tr>
<td>学生编号:</td>
<td><input type="text" name="students[1].age"></td>
</tr>
<tr>
<td>学生姓名:</td>
<td><input type="text" name="students[1].name"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交">
</td>
</tr>
</table>
</form>
页面添加学生信息:
Controller中使用MyClass对象接受参数:
@RequestMapping("/addclass")
public void deleteStudents3(MyClass myClass){
System.out.println(myClass);
}
控制台输出如下:
6、绑定Map集合
Map的绑定其实和List的绑定是差不多的,首先也是在包装的pojo中新添加一个Map类型的属性,但是,Map 可维护性比较差,因此一般不推荐使用,这里就不举例子了
7、自定义类型转换器
我们提交数据的时候,request中的数据都是以String的类型存在的,Spring会做一些类型转换,将这些数据转换成我们所需要的数据类型(int、float等)。对于日期来说,Spring支持的格式是2019/11/11,当我们传入2019-11-11,程序会报错,这时候就需要我们自定义类型转换器来满足我们的需要。详情参考