表单数据的接收

表单提交的数据也就是请求数据,分为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>
提交">
</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>
提交">
   </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>           
提交">
  </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>          
提交">
  </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>   
提交">
 </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>     
提交">
 </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");
集合数据");
return mav ;
}