SpringMVC——数据绑定
一、什么是数据绑定
在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。
在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数了。接下来,将通过一张数据流程图来介绍数据绑定的过程。
1 . Spring MVC将ServletRequest对象传递给DataBinder;
2 . 将处理方法的入参对象传递给DataBinder;
3 . DataBinder调用ConversionService组件进行数据类型转换、数据格式化等工作,并将ServletRequest对象中的消息填充到参数对象中;
4 . 调用Validator组件对已经绑定了请求消息数据的参数对象进行数据合法性校验;
5 . 校验完成后会生成数据绑定结果BindingResult对象,Spring MVC会将BindingResult对象中的内容赋给处理方法的相应参数。
二、几种数据绑定演示()
1 . 同名绑定:基本数据类型绑定
@RequestMapping("/selectUser")
public String selectUser(Integer id) {
System.out.println("id="+id);
return "success";
}
使用方法:http://localhost:8080/selectUser?id=1
*同名绑定还可以通过注解实现不同名绑定
@RequestMapping("/selectUser")
public String selectUser(@RequestParam(value="user_id")Integer id) {
System.out.println("id="+id);
return "success";
}
使用方法:http://localhost:8080/selectUser?user_id=1
- 了解RESTful:将请求参数变成请求路径的一种风格,使用场景:单参数传输,简化用户输入,避免请求方乱传数据。
传统请求路径:http://localhost:8080/selectUser?id=1
TESRful请求路径:http://localhost:8080/selectUser/1
//RESTful代码
@RequestMapping("/findOneById/{id}")
public String findOneById(@PathVariable Integer id){
System.out.println("id="+id);
return "Demo/findOneById";
}
2 . 绑定POJO:当数据个数多,类型复杂时可以将这些数据放入对象里面传输
//请求路径,省略向用户注册页面跳转方法
@RequestMapping("/register")
public String register(User user){
System.out.println(user.getUsername());
System.out.println(user.getPassword());
return "success";
}
<body>
<form action="/register" method="post">
用户名:<input type="text" name="username" /><br />
密码:<input type="text" name="password" /><br />
<input type="submit" value="注册"/>
</form>
</body>
3 . 绑定多POJO:即多个对象放到一个对象中传输的方法,此处不做演示。
4 . 绑定数组:适用于多个参数且参数类型一致的情况。
//请求路径,省略向用户列表页面跳转方法
@RequestMapping("/deleteUsers")
public String deleteUsers(Integer[] ids) {
if(ids !=null){
for (Integer id : ids) {System.out.println("删除了id为"+id+"的用户!");}
}else{System.out.println("ids=null");}
return "success";
}
<body>
<form action="/deleteUsers" method="post">
<table width="20%" border=1>
<tr><td>选择</td><td>用户名</td></tr>
<tr><td><input name="ids" value="1" type="checkbox"></td><td>tom</td></tr>
<tr><td><input name="ids" value="2" type="checkbox"></td><td>jack</td></tr>
<tr><td><input name="ids" value="3" type="checkbox"></td><td>lucy</td></tr>
</table>
<input type="submit" value="删除"/>
</form>
</body>
5 . 绑定集合:适用于传送多个复杂对象
//集合的对象类
public class UserVO {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
//请求路径,省略向用户批量修改页面跳转方法
@RequestMapping("/editUsers")
public String editUsers(UserVO userList) {
List<User> users = userList.getUsers();
for (User user : users) {
if(user.getId() !=null){
System.out.println("修改了id为"+user.getId()+"的用户名为:"+user.getUsername());
}
}
return "success";
}
<form action="/editUsers" method="post">
<table width="30%" border=1>
<tr><td>选择</td><td>用户名</td></tr>
<tr><td><input name="users[0].id" value="1" type="checkbox" /></td>
<td><input name="users[0].username" value="tome" type="text" /></td></tr>
<tr><td><input name="users[1].id" value="2" type="checkbox" /></td>
<td><input name="users[1].username" value="jack" type="text" /></td></tr>
</table><input type="submit" value="修改" />
</form>
上一篇: Java(1-1)
下一篇: Spring-事务的源码分析(七)