SpringMVC学习--参数绑定(springmvc参数绑定支持的类型有哪些)

boyanx3天前技术教程2

从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收。

直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。

1、HttpServletRequest

通过request对象获取请求信息。

2、HttpServletResponse

通过response处理响应信息

3、HttpSession

通过session对象得到session中存放的对象

4、Model/ModelMap

model是一个接口,modelMap是一个接口实现。用:将model数据填充到request域。

通过@RequestParam对简单类型的参数进行绑定。如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功,如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,则会报错。

1、简单的POJO

将pojo对象中的属性名于传递进来的属性名对应,如果传进来的参数名称和对象中的属性名称一致则将参数值设置在pojo对象中

2、复杂的POJO

与简单的POJO差不过,只是在页面上将页面属性设置为pojo类型的属性,如:

1 <input type="text" name="items.name" />

对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。将请求日期数据串传成 日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

自定义日期类型绑定:

 1 public class CustomDateConverter implements Converter<String,Date>{
 2 
 3     @Override
 4     public Date convert(String source) {
 5         //将实际的字符串转为date类型
 6         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 7         try {
 8 //转换成功直接返回
 9 return sdf.parse(source);
10         } catch (ParseException e) {
11 // TODO Auto-generated catch block
12  e.printStackTrace;
13         }
14         //转换失败返回null
15         return null;
16     }
17 
18 }

配置方式:springmvc.xml

 1 <mvc:annotation-driven conversion-service="conversionService"/>
 2 <!-- 自定义参数绑定 -->
 3     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 4         <!-- 转换器 -->
 5         <property name="converters">
 6 <list>
 7 <!-- 日期类型转换 -->
 8 <bean class="com.luchao.converter.CustomDateConverter"/>
 9 </list>
10         </property>
11     </bean>

1、数组绑定

如果要批量删除删除,用户在页面选择多个商品,批量删除。

将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。

如下代码:

1 // 批量删除
2     @RequestMapping(value="/deleteItems")
3     public void deleteItems(String[] item_ids) throws Exception {
4         for (String string : item_ids) {
5  System.out.println(string);
6         }
7     }

2、list绑定

通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交)。

页面属性:

<c:forEach items="${itemsList }" var="item" varStatus="status">
<tr>    

    <td><input name="itemsList[${status.index }].name" value="${item.name }"/></td>
    <td><input name="itemsList[${status.index }].price" value="${item.price }"/></td>
    <td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
    <td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td>


</tr>
</c:forEach>

controller中将包装list集合的POJO作为参数。

3、Map绑定

页面属性:

<tr>
<td>学生信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年龄:<inputtype="text"name="itemInfo['price']"/>
</td>
</tr>

controller中将包装Map集合的POJO作为参数。

如果出现乱码问题,需要添加一个拦截器,spring已经帮我们实现,配置如下:web.xml

 1 <filter>
 2         <filter-name>CharacterEncodingFilter</filter-name>
 3         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 4         <init-param>
 5 <param-name>encoding</param-name>
 6 <param-value>utf-8</param-value>
 7         </init-param>
 8     </filter>
 9     <filter-mapping>
10         <filter-name>CharacterEncodingFilter</filter-name>
11         <url-pattern>/*</url-pattern>
12     </filter-mapping>

另外,也可以将tomcat配置文件添加编码与工程编码一致,如下:

1 <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

另外一种方法对参数进行重新编码:

1 String userName = new 
2 String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。最后一种实现比较麻烦。

现在对SpringMVC已经有了一定的认识,比较其与struts2的一些特点可以加强认识。

1、springmvc基于方法开发的,struts2基于类开发的。

springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似service开发。

2、springmvc可以进行单例开发,并且建议使用单例开发,struts2通过类的成员变量接收参数,无法使用单例,只能使用多例。

3、经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl。

标签: todomvc

相关文章

全网最全Spring面试题之高级篇整理总结(共25题,附超详细解答)

1、什么是 Spring 框架?Spring 框架有哪些主要模块?Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring 帮助开发者解决了开发...

Java单元测试浅析(JUnit+Mockito)

作者:京东物流 秦彪1. 什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1) 单元测试: 针对计算机程序模块进行输出正确性检验工作...

SpringMVC 中的参数还能这么传递?涨姿势了

今天来聊一个 JavaWeb 中简单的话题,但是感觉却比较稀罕,因为这个技能点,有的小伙伴们可能没听过!1.缘起说到 Web 请求参数传递,大家能想到哪些参数传递方式?参数可以放在地址栏中,不过地址栏...

支付宝使用spring mvc在服务器端生成订单和签名信息

我们知道在使用支付宝的支付中,会需要我们生成这个订单,还要需要对订单排序签名,只有这两个信息生成客户端才可以进行调用SDK进行通信,进行调用支付宝。之前我介绍过如何生成支付宝在springMVC中如何...

springmvc实现支付宝移动支付的签名与异步回调

现在越来越多的应用需要接入支付的功能,我们通过手机客户端输入银行账号和验证码就可以轻松的实现支付,对于我们的生活非常方便,今天我们来说一下如何在我们的springmvc项目+Android客户端实现手...

EasyPoi使用(easypoi keyindex)

EasyPoi的主要特点:1.设计精巧,使用简单 2.接口丰富,扩展简单 3.默认值多,write less do more 4.spring mvc支持,web导出可以简单明了使用1.easypoi...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。