• spring参数绑定过程 

  从客户端请求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,没有传入参数,则会报错。

  • POJO绑定

  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。

转载于:https://www.cnblogs.com/lcngu/p/5510362.html

SpringMVC学习--参数绑定相关推荐

  1. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  2. 【SSM - SpringMVC篇】03 - SpringMVC的参数绑定 - 参数自动绑定 - javabean对象参数绑 - 嵌套bean参数绑定

    文章目录 SpringMVC的参数绑定 1 传统方式进行参数传递 2 通过SpringMVC的参数绑定实现[***用这个就行] 2.1 SpringMVC的基本数据类型的参数绑定 2.1.1 方法形式 ...

  3. (转)SpringMVC学习(五)——SpringMVC的参数绑定

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  4. SpringMvc之参数绑定注解详解

    在 SpringMVC 中,提交请求的数据是通过方法形参来接收的.从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 C ...

  5. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  6. SpringMvc之参数绑定注解详解之一

    引言: 前段时间项目中用到了REST风格来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加 任何注解),查看了提交方式为application/ ...

  7. SpringMvc自定义参数绑定

    2019独角兽企业重金招聘Python工程师标准>>> 问题:在SpringMvc中的参数绑定中,pojo对象中的日期成员变量往往不能被绑定在方法的参数中,因此为了让前台传入的日期数 ...

  8. 【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定...

    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在这一篇博文中,我将总结一下springm ...

  9. SpringMVC之Controller和参数绑定

    在上一篇Spring+SpringMVC+Mybatis整合中说到了SSM的整合,并且在其中添加了一个简单的查询功能,目的只是将整个整合的流程进行一个梳理,下面在上一篇中工程的基础上再说一些关于Spr ...

最新文章

  1. Pytorch使用GPU
  2. Tensorflow 全网最全学习资料汇总之框架平台的综合对比【3】
  3. 如何利用OpenCV自带的级联分类器训练程序训练分类器
  4. 用python来构建一个word文档-写文章
  5. windows netstat 查看端口、进程
  6. 正则表达式高级用法【原】
  7. 金融业对区块链必须有足够认识
  8. 阻塞非阻塞和同步异步
  9. 第三次学JAVA再学不好就吃翔(part19)--二维数组
  10. 累积分布函数_C7: 概率函数和分布函数Distribution Function
  11. html如何设置滚动条居中,css3内容垂直居中及垂直滚动条例子
  12. Asp.net三层结构原理与用意学习入门教程(五)
  13. vue+ 下拉框有选择项 点击选项也拿到值就是页面不显示选中项
  14. 电商大促作战指南之全链路压测
  15. 感应电机的矢量控制策略【Ⅰ】
  16. AD9173/AD9689 FMC采集板卡调试记录
  17. PostgreSQL下载安装教程以及官网下载包出现的问题
  18. H3C和锐捷如何查看光衰
  19. linux audit 服务,linux 的 audit 服務
  20. 高分一号PMS相机多光谱和全色数据预处理

热门文章

  1. python的普通方法、类方法和静态方法
  2. LeetCode 78. 子集(回溯)
  3. LeetCode 151. 翻转字符串里的单词(栈)
  4. linux历史性能数据,Linux平台下如何看OS历史的性能数据
  5. windows脚本命令闪退_NCL2Python|windows系统安装Pyngl和Pynio
  6. 李宏毅机器学习(九)Multi-lingual BERT
  7. Spring boot中使用log4j记录日志
  8. 新一代数据库TiDB在美团的实践
  9. 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结
  10. 论文浅尝 | 六篇2020年知识图谱预训练论文综述