SSM整合之参数绑定

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjnmbb12/article/details/73824003

参数绑定

1、springmvc参数绑定过程

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







2、默认支持的类型

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

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

HttpServletResponse
通过response处理响应信息

HttpSession
通过session对象得到session中存放的对象
Model/ModelMap
model是一个接口,modelMap是一个接口实现

作用:将model数据,填充到request域

3、简单类型

如:
    @RequestMapping(value = "/editItems",method = {RequestMethod.POST,RequestMethod.GET})
    public String editItems(Model model,Integer id) throws Exception{
        //调用service 根据商品ID查询商品信息
        ItemsCustom itemsCustom = itemsService.findItemsById(id);
        //通过形参中的model将model的数据传到页面
        //相当于modelandview的addObject
        model.addAttribute("itemsCustom",itemsCustom);
        return "items/editItems";
    }
可以直接在接收参数的括号里添加变量(形参变量),接收简单类型的数据,在这里, request传入的参数名要和Controller形参定义的变量名一致

我们可以通过@RequestParam 对简单类型的参数进行绑定,可以不用限制request传入的参数名要和Controller形参定义的变量名一致
用法:
    @RequestMapping(value = "/editItems",method = {RequestMethod.POST,RequestMethod.GET})
    //@RequestParam 指定request传入的参数名,即可和形参进行绑定
    public String editItems(Model model, @RequestParam(value = "id")Integer items_id) throws Exception{
        //调用service 根据商品ID查询商品信息
        ItemsCustom itemsCustom = itemsService.findItemsById(items_id);

        //通过形参中的model将model的数据传到页面
        //相当于modelandview的addObject
        model.addAttribute("itemsCustom",itemsCustom);
        return "items/editItems";
    }

还可以通过@RequestParam里的required属性指定参数是否必须要传入:
    // 通过required属性指定参数是否必须要传入
    public String editItems(Model model, @RequestParam(value = "id",required = true)Integer items_id) throws Exception{


defaultValue还可以设定默认值

4、绑定pojo

页面中input标签的name属性Controller的pojo形参中的属性名一致,可将页面中的数据,直接绑定至pojo内

页面定义:
<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>


pojo类形参定义:
    private String name;

    private Float price;

才可成功绑定

5、自定义参数绑定

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

pojo:
    private Date createtime;
自定义参数绑定要将日期串转成java.util.date类型
需要向处理器适配器中注入自定义的参数帮固定组件
自定义的日期转换器:
public class CustomDateConverter implements Converter<String,Date> {
    @Override
    public Date convert(String s) {
        //将日期串转换成日期类型 格式(yyyy-MM-dd HH:mm:ss)
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return simpleDateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //若参数绑定失败,则返回空值
        return null;
    }
}
配置方式
在springmvc.xml的适配器映射器扫描器中配置:
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
定义converter:
    <!-- 自定义参数绑定 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <!-- 转换器 -->
        <property name="converters">
            <list>
                <!-- 日期类型转换 -->
                <bean class="com.alex.ssm.controller.converter.CustomDateConverter"/>
            </list>
        </property>
    </bean>


即可实现自定义的参数绑定

问题

1、post乱码

在web.xml中添加post乱码过滤器
    <!-- 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>

猜你喜欢

转载自blog.csdn.net/fjnmbb12/article/details/73824003
今日推荐