SpringMVC数据绑定

来源:互联网 发布:编程都用mac 编辑:程序博客网 时间:2024/06/05 00:04

SpringMVC数据绑定流程:
1.Spring MVC主框架将ServletRequest对象以及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder(数据绑定器)实例对象

2.DataBinder在调用装配在Srping MVC上下文中的conversionService

组件进行数据类型转换,数据格式化工作,将Servlet中的请求信息填充到入参对象

3.调用validator对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData对象

4.SpringMVC抽取BindingResult中的入参对象和校验错误对象.将他们赋给处理方法的响应入参

一.基本数据类型(int为例)
jsp:

<form action="testInt" >id:<input type="text" name="id" value="10"/><input type="submit" value="submit"></form>

controller:

@RequestMapping(value="testInt")public String testInt(int id){System.out.println(id);return "success";}

input中的name属性和目标方法的参数名相同,不同的话可以使用@RequestParam注解,如果input值为null或“”,目标方法参数为基本数据类型会报数据类型转换异常,解决方案是目标方法参数使用包装类。

二.对象类型
user类:

private int id;private String username;private String passsword;private int age;private String email;

jsp:

<form action="testUser" ><input type="hidden" name="id" value="1" /> <input type="text" name="username" value="zhangsan" /> <input type="text" name="age" value="10" /> <input type="text" name="email" value="asd@huawei.com" /><input type="submit" value="submit" /></form>

controller:

@RequestMapping("testUser")public String testUser(User user){System.out.println("user:"+user);return "success";}

input的name属性和user对象的属性名称要一样,且user属性要有对应的set方法

三.list集合类型
UserList类:

public class UserList {private List<User> userList;public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}@Overridepublic String toString() {return "UserList [userList=" + userList + "]";}}

jsp:

<form action="testList" ><table><tr><td><input name="userList[0].id" value="1"></td><td><input name="userList[0].username" value="lisi"></td><td><input name="userList[0].age" value="22"></td><td><input name="userList[0].email" value="asd@huawei.com"></td></tr><tr><td><input name="userList[1].id" value="2"></td><td><input name="userList[1].username" value="wangwu"></td><td><input name="userList[1].age" value="23"></td><td><input name="userList[1].email" value="qwe@huawei.com"></td></tr><tr><input type="submit" value="submit"></tr></table></form>

controller:

@RequestMapping("testList")public String testList(UserList userList){for(User user:userList.getUserList()){System.out.println(user);}return "success";}

userList属性被定义成了list,所以在input的name属性中需要指定list下标

四.set集合类型
set和list类似,但set在使用时需要先在Set对象中add相应的数量的模型对象

private Set<User> userSet = new HashSet<User>();public UserSet() {userSet.add(new User());userSet.add(new User());}}
0 0