前面两章就介绍了什么是springmvc,springmvc的框架原理,而且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各类功能实现,慢慢消化java
--WZYweb
1、参数绑定spring
1.一、什么是参数绑定?数组
客户在浏览器端会提交一些参数到服务器端,好比用户的登陆等,就会传username 和 password过来,springmvc则经过参数绑定组件将请求参数的内容进行数据转换,而后将转换后的值覆给controller方法的形参,这就是参数绑定的过程,其实,springmvc就是使用controller方法形参来接收请求的参数浏览器
1.二、springmvc默认支持的参数类型服务器
能够在Controller方法的形参中直接使用如下类型mvc
HttpServletRequest、HttpServletResponse、HttpSession:这三个很熟悉,不作解释app
Model/ModelMap:将model数据填充到request域,好比以前的ModelAndView对象添加list,其实就是将list添加到request做用域,只是ModelAndView对象不只可以添加model数据,还可以添加视图。而Model对象的功能就只有将model数据填充到request做用域框架
如图所示,就是这样,在形参中使用这几个对象,那么在方法中就能直接用这几个对象了。有了request对象,就可以使用咱们之前学过的老方法获取请求参数等一些信息了。jsp
1.三、绑定简单类型的参数
上面讲解的只是默认支持的参数类型,有request等一些对象,必然是很好很方便的一件事,好比获取请求参数就能够获得解决了,可是springmvc提供更强大一些的功能。
绑定简单类型的参数规则:
1.3.1、若是请求参数的key和Controller类中方法的形参名称一致,那么就直接绑定;
请求url:http://localhost:8080/ssm_test/editItems.do?id=2 模拟客户端发送了一个id=2的请求参数过来,这里使用的是get方式,若是post方式也是同样的道理
Controller方法:
分析:形参中的名称与请求参数的名称相同,固能够直接绑定。
1.3.2、若是请求参数的key和Controller类中方法的形参名称不一致,那么就须要使用@RequestParam注解来进行参数绑定
请求url:http://localhost:8080/ssm_test/editItems.do?itemsId=2 模拟客户端发送了一个id=2的请求参数过来
Controller方法:
分析:使用@RequestParam("itemsId")注解将名为itemsId的请求参数的值赋值给形参中名为id的参数。注意,在对应的形参前面加该注解。
1.四、绑定pojo
使用springmvc绑定pojo的参数时,要求jsp中input框的name值要和Controller方法形参的pojo对象中的属性名称一致,以下图
jsp页面
controller方法
Items类
1.五、参数绑定时日期类型转换问题
在咱们从jsp页面传过来的参数的类型都是object的,而咱们本身编写的是有具体类型的,好比id是须要int型,name是须要string型,而springmvc就会帮咱们将这些简单的类型自动进行类型转换,可是当遇到Date类型的时候,就转换不了,须要咱们本身写一个类型转换器,而后给适配器配上,从而jsp传过来的参数可以转换成咱们须要的日期类型,若是不自定义类型转换器的话,会报错 即把请求中的日期字符串转成java的日期类型,该日期类型与pojo中日期属性的类型保持一致
1.5.一、自定义Converter
package com.wuhao.ssm.util; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.core.convert.converter.Converter; public class DateConverter implements Converter<String,Date> { @Override public Date convert(String source) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); return sdf.parse(source); } catch (Exception e) { e.printStackTrace(); } return null; } }
1.5.二、在springmvc.xml中配置该转换器
第一种方式(推荐):两步搞定
修改mvc:annotation-driven的配置
配置自定义转换器绑定
<!-- 配置处理器映射器和处理器适配器 --> <mvc:annotation-driven conversion-service="conversionService" /> <!-- 自定义参数绑定 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <!-- 日期类型转换器 --> <bean class="com.wuhao.ssm.util.DateConverter" /> </list> </property> </bean>
第二种方式:
<!--注解适配器,也就是不使用spring标签对注解进行管理 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer" ref="customBinder" /> </bean> <!-- 自定义webBinder --> <bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="conversionService" ref="conversionService" /> </bean> <!-- conversionService --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!-- 转换器 --> <property name="converters"> <list> <bean class="com.wuhao.ssm.util.DateConverter" /> </list> </property> </bean>
1.六、包装pojo参数绑定
与1.4的pojo参数绑定的区别在于,这里将pojo放入一个包装类中,以下图,将Items类放入了ItemsQueryVO类中,ItemsQueryVO就是一个包装pojo
ItemsQueryVO
jsp
controller:直接使用包装pojo接收
1.七、集合参数的绑定
1.7.一、简单类型的集合参数绑定,可使用数组或者List来接收
好比jsp页面有一些多选框,复选框,这样提交过来,就须要使用集合参数的绑定了。
jsp
controller
使用数组来接收
形参中的数组类型要和jsp中值的类型一致,形参中的参数名称要和jsp中name一致。也就是itemsid
使用list来接收
形参中list的泛型跟jsp中的值的类型一致,形参中参数名称要和jsp中name一致。(咱们想象中是这样)
结果,会报错,嘿嘿,由于不能在形参中直接定义List类型的参数,若是想要使用list来接收,须要把List类型的参数定义在包装POJO中,Controller的方法形参使用该包装POJO,下面讲解。因此若是使用接收简单类型的集合参数,使用数组最为方便。
1.7.二、pojo类型的集合参数绑定,可使用数组或者list来接收
注意:pojo类型的集合参数绑定时,接收它的数组或者List,都不能直接定义在Controller方法形参上,须要把它定义到一个包装pojo中,如何把这个包装pojo放到形参
使用list。
包装pojo类 ItemsQueryVo, 将须要装items集合的对象放入包装类中。
jsp
这里注意:标记的是name属性,不要与value属性搞混淆了,在ItemsQueryVo中有名为itemsList的list,因此在jsp中的name就须要一层层匹配下去才能正确将其属性值装载到正确的位置,list的格式为:itemsList[下标].name。 就拿这个分析,itemsList就能够找打ItemsQueryVo中的itemsList, itemsList[1],就能够定位到itemsList中的第一个items,itemsList[1].name就能够定位到itemsList中的第一个items的name属性,这样一来就看得懂了。
controller
1.7.三、总结上面两种
总结一下集合参数的绑定
对于简单类型的集合参数绑定,则使用数组做为形参来接收请求的集合参数
对于pojo类型的集合参数绑定,则使用数组或者list二者均可以,通常经常使用list。
注意:这种pojo类型的集合参数绑定,必须将list或者数组做为一个包装类中的属性,而后使用该包装类对象做为形参来接收请求参数。
1.7.四、map集合类型绑定
这个用的很少,通常只是用list,这个也稍微了解一下,等须要的时候会用便可,贴出关键代码就行
一样,须要使用包装pojo类。
ItemsQueryVo
jsp:格式为下面这样。就可以匹配到
controller
2、总结
看了这么多中参数绑定的例子,我以为用一句话来归纳最为准确,万变不离其宗。有耐心看一下就天然就会用了,真的很简单。只是知识比较多比较细,须要理解的也很少。