接着上一集,记录参数绑定的过程;

springmvc中,接收页面提交的数据是通过方法形参来接收:

一、默认支持的类型:

在controller形参中添加如下类型的参数处理适配器会默认识别并进行赋值:

HttpServletRequest、HttpServletResponse、HttpSession、

Modal/ModalMap(Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap)

二、简单类型的绑定:

通过@RequestParam对简单类型的参数进行绑定。

如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。

如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。

通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:

HTTP Status 400 - Required Integer parameter 'XXXX' is not present

默认支持的简单参数类型绑定:

Integer、String、float、double、boolean 还有吗?

三、pojo参数绑定:

页面中请求的参数name要和Controller形参中pojo的属性值名字一样,才可以绑定成功;

四、自定义参数绑定实现日期类型绑定:

对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。

将请求日期数据串传成日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

以下修改商品Item的代码为例子来说明:

ItemsController:

 @Controller
@RequestMapping("/items")
public class ItemsController { @Autowired
private ItemsService itemsService; @RequestMapping("/findItems")
public ModelAndView findItems() throws Exception { List<ItemsCustom> itemsList = itemsService.findItemsList(null); ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemsList", itemsList);
modelAndView.setViewName("items/itemsList");
return modelAndView;
} //商品信息修改页面显示
@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
//@RequestParam里边指定request传入参数名称和形参进行绑定。
//通过required属性指定参数是否必须要传入
//通过defaultValue可以设置默认值,如果id参数没有传入,将默认值和形参绑定。
public String editItems(Model model,@RequestParam(value="id",required=true,defaultValue="4") Integer items_id) throws Exception{
ItemsCustom itemsCustom = itemsService.findItemsById(items_id); //通过形参中的model将model数据传到页面
//相当于modelAndView.addObject方法
model.addAttribute("itemsCustom", itemsCustom); return "items/editItems";
} //商品信息修改提交
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom)throws Exception { itemsService.updateItems(id, itemsCustom); //重定向到商品查询列表
return "redirect:findItems.action";
//页面转发
//return "forward:findItems.action";
//return "success";
}
}

editItems.jsp:

 <title>修改商品信息</title>

 </head>
<body> <form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" >
<input type="hidden" name="id" value="${itemsCustom.id }"/>
修改商品信息:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td><input type="text" name="name" value="${itemsCustom.name }"/></td>
</tr>
<tr>
<td>商品价格</td>
<td><input type="text" name="price" value="${itemsCustom.price }"/></td>
</tr>
<tr>
<td>商品生产日期</td>
<td><input type="text" name="createtime" value="<fmt:formatDate value="${itemsCustom.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
</tr>

CustomDateConverter日期转换器:

 package com.cy.controller.converter;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import org.springframework.core.convert.converter.Converter; /**
* 日期转换器
*/
public class CustomDateConverter implements Converter<String,Date>{
@Override
public Date convert(String source) {
//实现 将日期串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
//转成直接返回
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
//如果参数绑定失败返回null
return null;
} }

在springmvc.xml中应用日期转换:

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 自定义参数绑定 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 转换器 -->
<property name="converters">
<list>
<!-- 日期类型转换 -->
<bean class="com.cy.controller.converter.CustomDateConverter"/>
<!-- 字符串去掉前后空格 -->
<!-- <bean class="..." /> -->
</list>
</property>
</bean>

在修改商品名字为中文时,解决post乱码问题,web.xml中配置:

<!-- post乱码过虑器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

补充:get乱码解决问题:

对于get请求中文参数出现乱码解决方法有两个:

1)修改tomcat配置文件添加编码与工程编码一致,如下:

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

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

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

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:

springMVC学习(5)-参数绑定的更多相关文章

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

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

  2. springmvc的初始化参数绑定

    一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时  重要的是参数类型 -------------------单日期的绑定 二. 配 ...

  3. [Spring MVC] - SpringMVC的各种参数绑定方式

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  4. SpringMVC的各种参数绑定方式

    1. 基本数据类型(以int为例,其他类似):2. 包装类型(以Integer为例,其他类似):3. 自定义对象类型:4. 自定义复合对象类型:5. List绑定:6. Set绑定:7. Map绑定: ...

  5. [转载]SpringMVC的Model参数绑定方式

    SpringMVC的各种参数绑定方式 http://www.cnblogs.com/HD/p/4107674.html springMVC中复杂嵌套对象.List等集合类型数据绑定 http://ww ...

  6. SpringMVC介绍及参数绑定

    本节内容: SpringMVC介绍 入门程序 SpringMVC架构 SpringMVC整合MyBatis 参数绑定 SpringMVC和Struts2的区别 一.SpringMVC介绍 1. 什么是 ...

  7. SpringMVC中的参数绑定总结

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

  8. SpringMVC详解------参数绑定

    SpringMVC详解------参数绑定  转载于:https://blog.csdn.net/swebin/article/details/92795422 目录 1.SpringMVC 参数绑定 ...

  9. SpringMVC中的参数绑定

    SpringMVC中的参数绑定 参数绑定的定义 所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller.从客户端请求key/value数据(比如ge ...

随机推荐

  1. Java——object类

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  2. selenium安装后,需要安装浏览器驱动

    google的驱动:chromedriver.exe 驱动版本与chrome版本对应的目录: http://npm.taobao.org/mirrors/chromedriver/2.32/notes ...

  3. 玩转X-CTR100 l USB功能-HOST鼠标键盘

    更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器具有MicroUSB接口,支持SLAVE和HOST两 ...

  4. STL标准库-迭代器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 本节主要介绍STL六大部件中的Iterators迭代器. 在语言方面讲,容器是一个class template, 算法是一个仿函 ...

  5. Mac 活动监视器 闪退 pro发热耗电过快问题解决,亲测可用解决

    该解决办法转载 Mac 活动监视器 闪退 pro发热耗电过快问题解决 这个月新买了mac,升级了系统,出现CPU发热,高负荷运转问题,始终找不到问题解决办法, ,这个过程太痛苦了,也不知道是什么原因. ...

  6. ListBox 控件单击事件

    XAML: <ListBox x:Name="ItemBox" Grid.Column="0" Tap="ItemBox_Tap"&g ...

  7. scanf格式化中的\n

    如果一个scanf的格式串以\n结尾,那么在读取完后还会阻塞等待,比如: int a; scanf("%d\n", &a); 这种情况,输入一个数字然后敲下回车后,程序还是 ...

  8. magento增加左侧导航栏

    1.打开 app\design\frontend\default\modern\layout\catalog.xml,在适当位置加入以下代码: <reference name=”left”> ...

  9. Linux C socket 封装

    /************************************************************************** * Linux C socket 封装 * 声明 ...

  10. ADC复用重映射