默认支持、Model/ModelMap、绑定简单类型、pojo、自定义类型
1.绑定默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器 会默认识别 并进行赋值 。
1-1 HttpServletRequest 通过request对象获取请求信息。(例如:如果需要从请求中把参数取出来,只需要在Controller方法的形参中添加一个参数即可,Springmvc框架会自动把Request对象传递给方法。)
1-2 HttpServletResponse 通过response处理响应信息。
1-3 HttpSession 通过session对象得到session中存放的对象。
2. Model/ModelMap 2-1 Model 除了ModelAndView以外,还可以使用Model来向页面传递数据,Model是一个接口,在参数里直接声明model即可。
如果使用Model则可以不使用ModelAndView对象 ,Model对象可以向页面传递数据 ,View对象则可以使用String返回值替代 。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 @RequestMapping ("/itemEdit.action" )public String queryItemById (HttpServletRequest request, Model model) { String strId = request.getParameter("id" ); Integer id = Integer.valueOf(strId); Item item = this .itemService.queryItemById(id); model.addAttribute("item" , item); return "itemEdit" ; }
2-2 ModelMap ModelMap是Model接口的实现类,也可以通过ModelMap向页面传递数据。
使用ModelMap和Model的用法和效果一样,如果直接使用Model,springmvc会实例化ModelMap。
3. 绑定简单类型 3-1 请求中参数名称和 处理器形参名称 一致 当请求的参数名称 和处理器形参名 称一致 时会自动将请求参数与形参进行绑定。
这样,从Request取参数的方法就可以进一步简化。
支持的数据类型: 整形:Integer、int
字符串:String
单精度:Float、float
双精度:Double、double
布尔型:Boolean、boolean
说明:URL中对于布尔类型的参数,请求的参数值为true或false。或者1或0。
参数类型推荐使用包装数据类型,因为基础数据类型不可以为null。
3-2 @RequestParam 当请求的参数名称 和处理器形参名 称不一致 时,可以使用注解进行绑定。
注解的参数: value :参数名字,即入参的请求参数名字,如value=“itemId”表示请求的参数区中的名字为itemId的参数的值将传入。
required :是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错:TTP Status 400 - Required Integer parameter ‘XXXX’ is not present
defaultValue :默认值,表示如果请求中没有同名参数时的默认值。
1 2 3 4 5 6 7 8 9 10 11 12 @RequestMapping ("/itemEdit" )public String queryItemById (@RequestParam(value = "itemId" , required = true , defaultValue = "1" ) Integer id, ModelMap modelMap) { Item item = this .itemService.queryItemById(id); modelMap.addAttribute("item" , item); return "itemEdit" ; }
4. 绑定pojo类型 4-1 绑定普通pojo类型(属性中不含pojo类) 使用pojo接收表单数据,如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使用简单类型接受数据,也可以使用pojo接收数据。
要求:pojo对象中的属性名和表单中input的name属性一致。
请求的参数名称 和pojo的属性名称 一致,会自动将请求参数赋值给pojo的属性。
4-2 绑定包装pojo类型 例如这种包装pojo类:
1 2 3 4 5 6 7 8 public class Item { private Integer id; private String itemname; private Double price; private Date itemdate; set/get。。。 }
1 2 3 4 public class QueryVo { private Item item; set/get。。。 }
jsp表单中:
1 2 3 4 <tr> <td><input type="text" name="item.id"></td> <td><input type="text" name="item.itemname"></td> </tr>
controller中接收包装pojo类的值 :
1 2 3 4 5 6 7 @RequestMapping ("/queryItem" ) public String queryItem (QueryVo queryVo) { System.out.println(queryVo.getItem().getId()); System.out.println(queryVo.getItem().getItemname()); return "success" ; }
5. 自定义参数绑定 例如,前端页面中修改商品的生产日期,并且根据业务需求自定义日期格式。
由于日期数据有很多种格式,springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。
前端控制器接 收到请求后,找到注解形式的处理器适配器 ,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定 。可以在springmvc处理器适配器 上自定义转换器Converter 进行参数绑定 。
一般使用mvc:annotation-driven 标签注解驱动加载处理器适配器,可以在此标签上进行配置。
5-1. 如果使用MVC注解驱动 的方式加载处理器适配器 和处理器映射器 : 先写一个日期转换器类(DateConverter),实现Converter<S, T>接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class DateConverter implements Converter <String , Date > { @Override public Date convert (String source) { try { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss" ); Date date = simpleDateFormat.parse(source); return date; } catch (ParseException e) { e.printStackTrace(); } return null ; } }
可以同时配置多个转换器,在springmvc.xml配置文件中进行配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 <mvc:annotation-driven conversion-service ="conversionService" /> <bean id ="conversionService" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean" > <property name ="converters" > <set > <bean class ="nynu.converter.DateConverter" /> </set > </property > </bean >
5-2. 如果使用独立配置加载处理器适配器 和处理器映射器 : 转换器类的编写同上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <bean class ="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" > <property name ="webBindingInitializer" ref ="customBinder" > </property > </bean > <bean id ="customBinder" class ="org.springframework.web.bind.support.ConfigurableWebBindingInitializer" > <property name ="conversionService" ref ="conversionService" /> </bean > <bean id ="conversionService" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean" > <property name ="converters" > <set > <bean class ="cn.itcast.springmvc.convert.DateConverter" /> </set > </property > </bean >