(八)springMvc 的参数绑定
参数绑定
将客户端传来的 key/value
数据,绑定到 Controller
参数的过程 ;
这一过程发生在调用 处理器适配器
的时候,spring
会去调用 参数绑定
组件,我使用的版本(4.5
),是使用 converter
进行任意支持类型的转换的,除去一些 时间
不能进行转换 ;
其实 spring
中内置了许多的 converter
,可以看做是转换器,帮我们进行参数绑定 ;
默认支持类型
默认支持的类型:
HtppServletRequest
、HtppServletResponse
、HttpSession
、Model或ModelMap
;当springMvc
发现Controller
方法的形参是上面的类型时,就会调用响应的converter
进行参数绑定 ;对简单类型的支持
当
controller
方法形参是简单类型的时候,SpringMvc
也会进行参数绑定,不过有个限制,形参的名字和key
的名字要一样 ;对于,这样的限制,我们当然不能忍受了,我们才是
code world
的掌控者,怎么能受限于一个参数绑定,这时候可以使用@RequestParam
来破掉这一限制 ;@RequestParam
参数讲解:name
:当形参名字和key
不一样的时候 ,使用name
来告诉springMvc
给我进行参数绑定,按照和name
相同的key
;required
: 表示形参是否是必须的 ,如果 不是必须的,则可以不传参数进来 ;defaultValue
:默认值 ,如果形参没有参数传进来,则使用该默认值 ;pojo类型
页面中提交的数据的名字,必须和
pojo
的属性名一致 ;页面中提交的数据的名字,必须和pojo
的属性名一致 ;比如,
pojo
中有个name
属性,那么页面中的对应数据想要参数绑定到pojo
对象中,则key
必须也是name
;比如,pojo
中有个name
属性,那么页面中的对应数据想要参数绑定到pojo
对象中,则key
必须也是name
;比如,pojo
中有个name
属性,那么页面中的对应数据想要参数绑定到pojo
对象中,则key
必须也是name
;比如,pojo
中有个name
属性,那么页面中的对应数据想要参数绑定到pojo
对象中,则key
必须也是name
;自定义参数绑定
对于一些情况下 ,
springMvc
内置的converter
总是不能满足的我们需求,我们需要自定义参数绑定 ,比如时间类型的参数绑定 ;实现
org.springframework.core.convert.converter.Converter
,注意不要导错包 ;/**
* 完成日期 的参数绑定
* @author An
* @date 2018年9月17日20:11:59
*/
public class DateConverter implements Converter<String,Date> { /**
* 日期转换类
*/
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd") ; @Override
public Date convert(String source) {
try {
return simpleDateFormat.parse(source) ;
} catch (ParseException e) {
e.printStackTrace();
}
// 转换失败,就返回 null ;
return null ;
}
}
在
springMvc.xml
中进行配置<!--使用注解的映射器、适配器-->
<!-- 添加 conversion-service 配上下面的id -->
<mvc:annotation-driven conversion-service="conversionService"/> <!--配置 自定义 参数绑定-->
<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
<!--写上自定义的转换器-->
<property name="converters">
<list>
<!--日期 转换 -->
<bean class="xin.ijava.ssm.converter.DateConverter"/>
</list>
</property>
</bean>
包装类型
pojo
参数绑定其实和
pojo
类型一样 ;只是包装类型的
pojo
中嵌套着pojo
,此时赋值,使用嵌套的pojo.属性名
,作为网页的name
属性的值 ;<input id="itemName" type="text" name="itemCustomer.name"/>
尽量使用包装类型,便于扩展,解决不同类之间属性重名问题 ,比如形参有
user
、book
,它们都有属性name
,此时页面中就可以使用pojo.name
为它们赋值;数组绑定
形参是数组的时候,跟基本数据类型一样,形参的名字 和 网页
name
值一样;list 绑定
list
绑定,将list
放在pojo
中进行绑定,也就是pojo
中属性为list
,此时形参还是一个包装的pojo
;要将数据提交到
list
中的对象的属性上,只需要将网页的name
的值,设为list[下标].属性
;map 绑定
还是将
map
放在pojo
中进行绑定,网页上的name
属性的值为map['key']
;
最新文章
- Easyui columns列图片移位问题!!!
- iOS支付宝支付总结
- JSP动作元素之include
- c#关于日期的两个知识点
- Cheatsheet: 2013 07.21 ~ 07.31
- (三)ubuntu学习前传—uboot常见环境变量
- sqlserver资源下载
- .Net 两个对像之间的映射
- 绘图quartz之渐变
- Google大数据三篇著名论文----中文版
- 高效程序猿之 VS2010快速生成代码模板
- Nginx中的信号量(信号控制)
- VPS搭建离线下载服务器——后网盘时代
- myeclipse中修改maven的默认仓库位置
- 用户创建,删除and并发注册and系统登陆的API研究(学习汇总网上资料)
- 【redis】在dotnet core下的redis的使用
- luogu1196 银河英雄传说 (并查集)
- Java根类Object的方法说明
- ownCloud安卓android客户端版本2.9.3
- [macOS] Error: /usr/local must be writable!"; (Sierra 10.12 )
热门文章
- Til the Cows Come Home ( POJ 2387) (简单最短路 Dijkstra)
- ICEM—三分之一风扇
- Exception in thread ";main"; java.util.ConcurrentModificationException解决方案
- Java并发指南12:深度解读 java 线程池设计思想及源码实现
- ArcGIS超级工具SPTOOLS-锐角检查,获得内角并判断是否凸多边形,获得线(面)两个折点方向
- https证书制作及springboot配置https
- /proc/sys/kernel/sysrq /proc/sysrq-trigger----强制重启/触发器
- 错误注入 异常行为 环境变量或代码动态激活来触发这些异常行为 模拟错误 容错性 正确性 稳定性 宏 本质 macro
- css3实现jQuery的slideUp和slideDown效果
- Kali Linux更新5.2.9后 Vmware Workstation无法正常启动