从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。 springmvc中,接受页面提交的数据是通过方法的形参来接收。而不是在controller类定义成员变量接收。
注解开发中参数绑定: 将request请求过来的key/value的数据(理解成一个串),通过转换(参数绑定的一部分),将key/value串转成形参,将转换后的结果传给形参(整个参数绑定过程)。 springmvc所支持的参数绑定: 1、默认支持很多类型:HttpServletRequest、response、session、 model/modelMap将模型数据填充到request域; 2、支持简单的数据类型:整型、字符串、日期。 只要能保证request请求的参数名和形参名称一致,自动绑定成功; 如果request请求的参数名和形参不一致,可以通过@RequestParam(指定request请求的参数名),@RequestParam加在形参的前边。 @RequestParam的属性required设置为true,表示该参数必须传入。属性defalutValue可以设置默认值,如果参数没有传入,将默认值传入。 3、支持pojo类型。 只要保证页面提交的request提交的参数名和pojo中的属性一致,自动将request请求的参数设置到pojo的属性中。 注意:形参中既有pojo类型又有简单类型,参数绑定互不影响。 页面中input的name和controller的pojo形参中的属性一致,将页面中的数据绑定到pojo. 页面定义: <input type="text" name="name" value="${itemsCustom.name}"/> controller的pojo形参定义: public class ItemsCustom{ private Integer id; private String name; ... }
问题: post乱码: 在web.xml中添加post乱码过滤器。 get乱码: 1、修改tomcat配置文件添加编码与工程编码一致; 2、对参数进行重新编码。
自定义参数绑定: 日期类型绑定自定义:定义Converter <源类型,目标类型> 接口的实现类。Converter<String,Date> 对于controller形参中有pojo对象,如果属性中有日期类型,需要自定义参数绑定。 需要向处理器适配器中注入自定义的参数绑定组件。 实现: 注入:<mvc:annotation-driven conversion-service="conversionService"></mvc;annotation-driven> <!--自定义参数绑定--> <bean id="conversionService" class="FormattingConversServletFactoryBean"> <!--转换器--> <property name="converters"> <list> <bean class="自定义类型转换全限定类名"/> <bean class="自定义类型转换全限定类名"/> <bean class="自定义类型转换全限定类名"/> </list> </property> </bean> 实现自定义类型转换(将字符串转化为日期): public class CustomDateConverter implements Converter<String, Date>{ @Override public Date convert(String source){ //实现将字符串转化为日期 } }
注意:要转换的目标类型一定要和接受的pojo中的属性类型一致。
包装类型pojo的参数绑定: 在形参中让包装类型的pojo(pojo中包含pojo)接收查询条件参数。 页面参数: <input name="itemsCustom.name/> 方法形参: public ModelAndView queryItems(HttpServletRequest request, ItemsQueryVo itemsQueryVo)throws Exception{...} pojo: public class ItemsQueryVo{ private Items items; private ItemsCustom itemsCustom; ... }
参数绑定--数组: 页面定义: <c:forEach items="${itemsList}" var="item"> <tr> <td><input type="checkbox" name="items_id" value="${item.id}"/></td> </tr> </c:forEach> 形参定义: public String deleteItems(Integer[] items_id)throws Exception{...}
参数绑定--List/Map: