第三天: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 提供setget方法

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)创建pojoPerson 提供setget方法

public class Person implements Serializable {

    private Integer id;

    private Boolean marry;

private Dog dog;

(2) 创建pojoDog 提供setget方法

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>

 

4List集合类型绑定

(1)创建普通pojoPerson

public class Person implements Serializable {

    private Integer id;

    private String name;

private List<Dog> dogs;

(2)创建pojoDog 提供setget方法

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>

5Map集合类型

(1)创建普通pojoPerson

public class Person implements Serializable {

    private Integer id;

private String name;

private Map<String,Dog> dogs

(2)创建pojoDog 提供setget方法

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>

6Set集合类型

(1)创建普通pojoPerson

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)创建pojoDog 提供setget方法

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";

}

3Model  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 ;

}

原文地址:https://www.cnblogs.com/masterhxh/p/13853564.html