第三天:SpringMVC--表单数据的接收(重点)
表单数据的接收
表单提交的数据也就是请求数据,分为Get和Post两种方式提交。
springmvc接收表单数据的方式有:
1. @RequestParam 注解
1 @RequestMapping(value = "/xxxx.do") 2 public void create(@RequestParam(value="userName") String userName) throws Exception { 3 4 }
2. @PathVariable 注解
1 @RequestMapping(value="/{groupId}.do") 2 public void detail(@PathVariable long groupId){ 3 groupRepository.selectOne(groupId); 4 }
3. @ModelAttribute 注解
1 @RequestMapping(value = "/xxxx.do") 2 public String create(@ModelAttribute User user) throws Exception { 3 userService.insert(user); 4 return "redirect:/user/create.do"; 5 }
4. Request对象
1 public ModelAndView method1(HttpServletRequest request, 2 HttpServletResponse respnose) throws ServletException, IOException { 3 Map model = new HashMap(); 4 model.put("message", "你调用的是方法1"); 5 return new ModelAndView("/index.jsp", "model", model); 6 }
(一)接收表单提交数据
1、接收普通类型参数
(1)创建控制器方法:
@RequestMapping("p1")
public String p1(String name, int age) {
System.out.println("前台的参数值" + name + ":" + age);
return "success";
}
(2)创建表单
<form action="p1">
name:<input type="text" name="name"><br>
age:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
注意:表单中的input控件属性name的值的名称要和控制器方法参数的名称保持一致
2、普通的pojo绑定
(1)创建类pojo 类Person 提供set和get方法
public class Person implements Serializable {
private Integer id;
private String name;
private Double sal;
private Boolean marry;
(2)创建控制器方法
@RequestMapping("p3")
public String p3(Person per, String name) {
System.out.println("前台的参数值" + per + ":" + name);
return "success";
}
(3)创建表单
<form action="p3">
id:<input type="text" name="id"><br>
name:<input type="text" name="name"><br>
sal:<input type="text" name="sal"><br>
marr:<input type="text" name="marry"><br>
<input type="submit" value="提交">
</form>
注意: 表单中input控件的name属性的值必须要pojo对象中的属性名称保持一致,这样就可以完成参数绑定
3、复杂的pojo绑定
(1)创建pojo类Person 提供set和get方法
public class Person implements Serializable {
private Integer id;
private Boolean marry;
private Dog dog;
(2) 创建pojo类Dog 提供set和get方法
public class Dog implements Serializable {
private String name;
private String furcolor;
(3) 创建控制器方法
@RequestMapping("p4")
public String p4(Person per) {
System.out.println("前台的参数值" + per);
return "success";
}
(4)创建表单
<form action="p4">
id:<input type="text" name="id"><br>
name:<input type="text" name="name"><br>
dog.name:<input type="text" name="dog.name"><br>
dog.furcolor:<input type="text" name="dog.furcolor"><br>
<input type="submit" value="提交">
</form>
4、List集合类型绑定
(1)创建普通pojo类Person
public class Person implements Serializable {
private Integer id;
private String name;
private List<Dog> dogs;
(2)创建pojo类Dog 提供set和get方法
public class Dog implements Serializable {
private String name;
private String furcolor;
(3)创建控制器方法
@RequestMapping("p5")
public String p5(Person per) {
System.out.println("前台的参数值" + per);
return "success";
}
(4)创建表单
<form action="p5">
id:<input type="text" name="id"><br>
name:<input type="text" name="name"><br>
dog.name:<input type="text" name="dogs[0].name"><br>
dog.furcolor:<input type="text" name="dogs[0].furcolor"><br>
dog.name:<input type="text" name="dogs[1].name"><br>
dog.furcolor:<input type="text" name="dogs[1].furcolor"><br>
dog.name:<input type="text" name="dogs[2].name"><br>
dog.furcolor:<input type="text" name="dogs[2].furcolor"><br>
<input type="submit" value="提交">
</form>
5、Map集合类型
(1)创建普通pojo类Person
public class Person implements Serializable {
private Integer id;
private String name;
private Map<String,Dog> dogs
(2)创建pojo类Dog 提供set和get方法
public class Dog implements Serializable {
private String name;
private String furcolor;
(3)创建控制器方法
@RequestMapping("p5")
public String p5(Person per) {
System.out.println("前台的参数值" + per);
return "success";
}
(4)创建表单
<form action="p6">
id:<input type="text" name="id"><br>
name:<input type="text" name="name"><br>
dog.name:<input type="text" name="dogs['x'].name"><br>
dog.furcolor:<input type="text" name="dogs['x'].furcolor"><br>
dog.name:<input type="text" name="dogs['y'].name"><br>
dog.furcolor:<input type="text" name="dogs['y'].furcolor"><br>
<input type="submit" value="提交">
</form>
6、Set集合类型
(1)创建普通pojo类Person
public class Person implements Serializable {
private Integer id;
private String name;
private Set<Dog> dogs = new HashSet<Dog>();
public Person() {
dogs.add(new Dog());
dogs.add(new Dog());
}
(2)创建pojo类Dog 提供set和get方法
public class Dog implements Serializable {
private String name;
private String furcolor;
(3)创建控制器方法
@RequestMapping("p5")
public String p5(Person per) {
System.out.println("前台的参数值" + per);
return "success";
}
(4)创建表单
<form action="p7">
id:<input type="text" name="id"><br>
name:<input type="text" name="name"><br>
dog.name:<input type="text" name="dogs[0].name"><br>
dog.furcolor:<input type="text" name="dogs[0].furcolor"><br>
dog.name:<input type="text" name="dogs[1].name"><br>
dog.furcolor:<input type="text" name="dogs[1].furcolor"><br>
dog.name:<input type="text" name="dogs[2].name"><br>
dog.furcolor:<input type="text" name="dogs[2].furcolor"><br>
<input type="submit" value="提交">
</form>
注意:如果使用set集合进行绑定,需要在pojo类中提前初始化集合对象,并在pojo类中添加构造方法指定集合存放元素的个数
(二) 自定义类型转换器
针对表单参数中不能自动转换的类型如:Date日期类型我们可以自己制定类型转换器步骤如下:
1、自定义类实现接口Converter
public class DateConverter implements Converter<String,Date> {
public Date convert(String info) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
date = sdf.parse(info);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
2、声明类型转换器
<bean
id="converterservice"
class="org.Springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.offcn.converter.DateConverter"></bean>
</list>
</property>
</bean>
3、使用类型转换器服务
<mvc:annotation-driven conversion-service="converterservice" />
在项目中如果出现日期类型数据就可以完成自动类型转换
(三)默认参数绑定
1、绑定ServletAPI
@RequestMapping("param1")
public String param1(
HttpServletRequest request,HttpServletResponse response,HttpSession session) {
直接使用绑定的参数完成业务处理
}
2、绑定Map集合
放入map集合中的内容等价于放入request域中的共享数据
@RequestMapping("a2")
public String a2(Map<String,Object> map) {
map.put("list","查询数据的集合");
map.put("total",345);
map.put("currentPage",2);
return "success";
}
3、Model ModelMap
@RequestMapping("a3")
public String a3(Model model,ModelMap modelMap) {
model.addAttribute("password",123);
modelMap.put("a","abc");
modelMap.addAttribute("b","kkk");
return "success";
}
4、绑定 ModelAndView
@RequestMapping("a4")
public ModelAndView a4(ModelAndView mav) {
mav.setViewName("success");
mav.addObject("nlist","集合数据");
return mav ;
}