文章目录
- 数据绑定介绍
- 简单数据绑定
- 复杂数据绑定
在实际开发中,多数情况下客户端会传递带有不同参数的请求,所以在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。 这种将请求消息数据和后台方法参数建立连接的过程就是Spring MVC中的数据绑定。
数据绑定介绍
数据绑定的过程如下图所示:
相关步骤描述如下:
1:Spring MVC将ServletRequest对象传递给DataBinder
2:将处理方法的入参对象传递给DataBinder
3:DataBinder调用ConversionService组件进行数据类型转换、数据格式化等工作,并将ServletRquest对象中的消息填充到参数对象中
4:调用Validator组件对已经绑定了请求消息数据的参数对象进行数据合法性校验
5:校验完数据后会生成数据绑定结果BindingResult对象,Spring MVC会将BindingResult对象中的内容赋给处理方法中的相应参数
简单数据绑定
- 默认数据类型绑定
// 绑定默认数据类型
@RequestMapping("/selectUser")
public String selectUser(HttpServletRequest request) {
String id = request.getParameter("id");
System.out.println("id="+id);
return "success";
}
上述代码中,在Controller类的方法中使用了HttpServletRequest参数对象,通过该对象的getParameter()方法获取指定参数。
在浏览器中访问地址:http://localhost:8080/项目名/selectUser?id=1
常用的默认参数类型如下:
1:HttpServletRequest:通过request对象获取请求信息
2:HttpServletResponse:通过response处理响应信息
3:HttpSession:通过session对象得到session中存储的对象
4:Model/ModelMap:Model是一个接口,ModelMap是一个接口实现,作用是将model数据填充到request域
- 简单数据类型绑定
//@RequestMapping用于映射一个请求
@RequestMapping("/selectUser")
// @RequestParam注解主要用于对请求中的参数进行定义
public String selectUser(@RequestParam(value="user_id")Integer id) {
System.out.println("id="+id);
return "success";
}
在浏览器中访问地址:http://localhost:8080/项目名/selectUser?user_id=1
- POJO类型绑定
@RequestMapping("/registerUser")
public String registerUser(User user) {
String username = user.getUsername();
Integer password = user.getPassword();
System.out.println("username="+username);
System.out.println("password="+password);
return "success";
}
User实体类
public class User {
private Integer id; //用户id
private String username; //用户
private Integer password; //用户密码
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getPassword() {
return password;
}
public void setPassword(Integer password) {
this.password = password;
}
}
jsp页面
<form action="${pageContext.request.contextPath}/registerUser" method="post">
<!-- input中的name属性必须和pojo类中的属性名相同 -->
用户名:
<input type="text" name="username" /><br />
密 码:
<input type="text" name="password" /><br />
<input type="submit" value="注册" />
</form>
</body>
复杂数据绑定
- 数组绑定
/**
* 接收批量删除用户的方法
*/
@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";
}
user.jsp页面
<form action="${pageContext.request.contextPath }/deleteUsers" method="post">
<table width="20%" border=1>
<tr>
<td>选择</td>
<td>用户名</td>
</tr>
<tr>
<!-- input元素中的属性值必须和控制类方法中的参数名一致 -->
<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>
- 集合绑定
/**
* 接收批量修改用户的方法
*/
@RequestMapping("/editUsers")
public String editUsers(UserVO userList) {
// 将所有用户数据封装到集合中
List<User> users = userList.getUsers();
// 循环输出所有用户信息
for (User user : users) {
// 如果接收的用户id不为空,则表示对该用户进行了修改
if(user.getId() != null){
System.out.println("修改了id为"+user.getId()+
"的用户名为:"+user.getUsername());
}
}
return "success";
}
UserVO类
import java.util.List;
import com.itheima.po.User;
/**
* 用户包装类
*/
public class UserVO {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
user_edit页面
<form action="${pageContext.request.contextPath }/editUsers"
method="post">
<table width="30%" border=1>
<tr>
<td>选择</td>
<td>用户名</td>
</tr>
<tr>
<td>
<!-- input中的name属性值要和实体类中的值相同 -->
<!-- name中的users是UserVO中的users -->
<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>