• SpringMVC参数绑定


    1     参数绑定

             处理器适配器在执行Handler之前需要把http请求的key/value数据绑定到Handler方法形参数上。

    1.1  默认支持的参数类型

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

    1.1.1.1 HttpServletRequest

    通过request对象获取请求信息

    1.1.1.2 HttpServletResponse

    通过response处理响应信息

    1.1.1.3 HttpSession

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

    1.1.1.4 Model/ModelMap

    ModelMapModel接口的实现类,通过ModelModelMap向页面传递数据,如下:

    //调用service查询商品信息
    Items item = itemService.findItemById(id);
    model.addAttribute("item", item);

    页面通过${item.XXXX}获取item对象的属性值。

    使用Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap。

    1.1.1  参数绑定介绍

             注解适配器对RequestMapping标记的方法进行适配,对方法中的形参会进行参数绑定,早期springmvc采用PropertyEditor(属性编辑器)进行参数绑定将request请求的参数绑定到方法形参上,3.X之后springmvc就开始使用Converter进行参数绑定。

     1.1.2  简单类型

    当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。

    1.1.2.1 整型

    public String editItem(Model model,Integer id) throws Exception{

    1.1.2.2 字符串

    例子略

    1.1.2.3 单精度/双精度

    例子略

    1.1.2.4 布尔型

    处理器方法:

    public String editItem(Model model,Integer id,Boolean status) throws Exception

    请求url:

    http://localhost:8080/springmvc_mybatis/item/editItem.action?id=2&status=false

     

    说明:对于布尔类型的参数,请求的参数值为true或false。

    1.1.2.5 @RequestParam

    使用@RequestParam常用于处理简单类型的绑定。

    value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;

    required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报;

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

     

    defaultValue:默认值,表示如果请求中没有同名参数时的默认值

    定义如下:

    public String editItem(@RequestParam(value="item_id",required=true) String id) {
        
    }

    形参名称为id,但是这里使用value=" item_id"限定请求的参数名为item_id,所以页面传递参数的名必须为item_id。

    注意:如果请求参数中没有item_id将跑出异常:

    HTTP Status 500 - Required Integer parameter 'item_id' is not present

    这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值

    1.3.1  pojo

    1.3.1.1 简单pojo

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

    页面定义如下;

    <input type="text" name="name"/>
    <input type="text" name="price"/>

    Contrller方法定义如下:

    @RequestMapping("/editItemSubmit")
        public String editItemSubmit(Items items)throws Exception{
        System.out.println(items);
    }

    请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性。

    1.3.1.2 包装pojo

    如果采用类似struts中对象.属性的方式命名,需要将pojo对象作为一个包装对象的属性,action中以该包装对象作为形参。

    包装对象定义如下:

     

    Public class QueryVo {
    private Items items;
    
    }

    页面定义:

     

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

    Controller方法定义如下:

    public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
    System.out.println(queryVo.getItems());

    1.1.1  自定义参数绑定

    1.1.1.1 需求

    根据业务需求自定义日期格式进行参数绑定。

    1.1.1.2 Converter

    1.1.1.2.1       自定义Converter
    public class CustomDateConverter implements Converter<String, Date> {
    
        @Override
        public Date convert(String source) {
            try {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return simpleDateFormat.parse(source);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    配置方式1

    <mvc:annotation-driven conversion-service="conversionService">
    </mvc:annotation-driven>
    <!-- conversionService -->
        <bean id="conversionService"
            class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <!-- 转换器 -->
            <property name="converters">
                <list>
                    <bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
                </list>
            </property>
        </bean>
     配置方式2
    <!--注解适配器 -->
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
             <property name="webBindingInitializer" ref="customBinder"></property> 
        </bean>
        
        <!-- 自定义webBinder -->
        <bean id="customBinder"
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService" />
        </bean>
        <!-- conversionService -->
        <bean id="conversionService"
            class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <!-- 转换器 -->
            <property name="converters">
                <list>
                    <bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
                </list>
            </property>
        </bean>

    1.1.1  集合类

    1.1.1.1  字符串数组

    页面定义如下:

    页面选中多个checkbox向controller方法传递

    <input type="checkbox" name="item_id" value="001"/>
    <input type="checkbox" name="item_id" value="002"/>
    <input type="checkbox" name="item_id" value="002"/>

    传递到controller方法中的格式是:001,002,003

    Controller方法中可以用String[]接收,定义如下:

    public String deleteitem(String[] item_id)throws Exception{
            System.out.println(item_id);
    }
  • 相关阅读:
    对象和接口简单比较
    DevExpress报表开发基本流程
    有关ExecuteNonQuery返回值的分析
    2012年度计划
    小测试:有关++i&&i++,你是不是看晕了
    “PE文件格式”1.9版 完整译文
    .NET中的入口及幕后英雄:MSCorEE.dll(转)
    软件构建过程中的隐喻
    转:地图导出格式,教你如何选择
    推荐几个网站
  • 原文地址:https://www.cnblogs.com/huanghuanghui/p/springMVC.html
Copyright © 2020-2023  润新知