spring参数绑定过程
从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。
springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收!!!!
默认支持的类型
HttpServletRequest
通过request对象获取请求信息
HttpServletResponse
通过response处理响应信息
HttpSession
通过session对象得到session中存放的对象
Model/ModelMap
model是一个接口,modelMap是一个接口实现 。
作用:将model数据填充到request域。
简单类型
通过@RequestParam对简单类型的参数进行绑定。
如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。
如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。
通过required属性指定参数是否必须要传入,如果设置为true
1 //@RequestParam将传入的参数名称和形参进行绑定 2 //required指定参数是否必须传入 defaultVaklue 默认值 3 @RequestMapping("/editItems") 4 public String editItems(Model model,@RequestParam(value="id",required=true) Integer items_id) throws Exception { 5 //调用service查询商品信息 6 ItemsCustom itemsCustom = itemsService.findItemsById(items_id); 7 model.addAttribute("itemsCustom", itemsCustom); 8 return "items/editItems"; 9 }
pojo绑定
页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。
1 @RequestMapping("/editItemsSubmit") 2 public String editItemsSubmit(HttpServletRequest request,Integer id,ItemsCustom itemsCustom) throws Exception { 3 4 itemsService.updataItems(id, itemsCustom); 5 //重定向到商品查询列表 6 //return "redirect:queryItems.action"; 7 //页面转发 8 //return "forward:queryItems.action"; 9 10 return "success"; 11 }
自定义参数绑定实现日期类型绑定
对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。
将请求日期数据串传成 日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。
所以自定义参数绑定将日期串转成java.util.Date类型。
需要向处理器适配器中注入自定义的参数绑定组件。
自定义日期类型绑定
1 public class CustomDateConverter implements Converter<String, Date> { 2 3 public Date convert(String source) { 4 //实现将日期格式的类型转换为"yyyy-MM-dd HH:mm:ss" 5 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 6 try { 7 return simpleDateFormat.parse(source); 8 } catch (ParseException e) { 9 e.printStackTrace(); 10 } 11 //参数绑定失败返回null 12 return null; 13 } 14 15 }
配置方式
1 <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> 2 <!-- 自定义参数绑定 --> 3 <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 4 <!-- 转换器 --> 5 <property name="converters"> 6 <list> 7 <!-- 日期类型转换 --> 8 <bean class="cn.cuibusi.ssm.controller.converter.CustomDateConverter"/> 9 </list> 10 </property> 11 </bean>