在 SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。
把值直接传到页面
分为7种绑定类型:
(一)
默认支持类型,也是常用类型,传值会用到几个对象:
①、HttpServletRequest 对象
②、HttpServletResponse 对象
③、HttpSession 对象
④、Model/ModelMap 对象
写方法时可以把参数写进来:
public ModelAndView test(HttpServletRequest request, HttpServletResponse response, Model model, ModelMap mm) throws Exception {
ModelAndView mv = new ModelAndView();
request.setAttribute(“name”,“jingjing”);
request.getSession().setAttribute(“age”,22);
model.addAttribute(“sex”,“nv”);
mm.addAttribute(“email”,“110@qq.com”);
mv.setViewName(“show”);
return mv;
}
(二)
基本数据类型的绑定:
当input的name值和Controller的参数变量名不一致可以用注解方式解决:
@RequestMapping("/print")
// public void print(@RequestParam(“age2”) int age){
// System.out.println(age);
// }
网页.jsp
(三)包装数据类型的绑定:
如Integer、Long、Byte、Double、Float、Short,(String 类型在这也是适用的)这里我们以 Integer
和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或”",以上面代码为例,如果表单中num为”",或者表单中无name这个input,那么,Controller方法参数中的name值则为null。
测试代码如下:
/* @RequestMapping("/print")
//Error resolving argument [0] [type=java.lang.Integer]
//For input string: "vvv" name还可以取值
public void print(Integer name){
System.out.println(name);
}*/
(四)5、POJO(实体类)类型的绑定
/@RequestMapping("/print")
public void print(Users users){
System.out.println(users);
}/
public class Users {
private int id;
private String name;
private Date birthday;//转型
封装
}
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String date) {
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);//注意格式,页面传值也要一致
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
Spring-mvc配置
<mvc:annotation-driven conversion-service=“conversionService”></mvc:annotation-driven>
注意类的路径。
(五)复合POJO(实体类)类型的绑定
//这里我们增加一个实体类,Datils
//private Datils datils;
封装到users类中
public class Datils {
private String address;
private String tel;
封装
}
public class Users {
private int id;
private String name;
private Date birthday;
private Datils datils;
封装
}
/@RequestMapping("/print")
public void print(Users users){
System.out.println(users);
}/
页面.jsp
页面中需要封装类的对象参数来调用。
(六)数组类型的绑定,
控制层函数:
public void array(Integer[]) userId){
for(int i=0:userId){
sout(i);//打印
}
}
(七、List类型的绑定,
@RequestMapping(“selectAllUserAndList”)
public ModelAndView selectAllUserAndList(){
List listUser = userService.selectAllUser();
ModelAndView mv = new ModelAndView();
mv.addObject(“listUser”, listUser);
mv.setViewName(“list”);
return mv;
}
Public void list(UserVo userVo){
sout(userVo.getUserList())
}
由于我们在 JSP 页面 input 输入框定义的name属性名是 userList[${status.index}].id 这种形式的,这里我们直接用 UserVo 就能获取页面批量提交的 User信息
(八)map类型的绑定
首先在 UserVo 里面增加一个属性 Map<String,User> userMap
第二步:JSP页面,注意看 输入框 name 的属性值
第三步:Controller 中获取页面的属性
注:(六,七,八作为了解,平常用的不多)