• springmvc-参数绑定


    一.参数绑定过程

      》客户端请求的附带参数,通过参数绑定的方式,和方法的形参进行绑定

      》绑定的流程:

        1.客户端发送带有参数的请求

        2.处理器适配器使用springmvc提供的参数绑定组件将上传的参数数据类型转换为方法的形参类型(参数绑定组件是用来转换数据类型的)

          * 参数绑定组件:早期springmvc是使用propertyEdit(只能字符串转换Javaduix)参数绑定组件;后期使用converter(字符串转换为任意类型)

          * 一把情况下,不需自定义参数绑定组件,springmvc已经提供很多的converter(转换器)给我们使用

          * 特殊情况下,比如日期类型的绑定,由于不知道开发者定义日期的格式具体是怎样的,日期的参数绑定组件就固定不下来,需要根据具体情况自定义组件

        3.类型转换成功,适配器就可以进行方法参数绑定了

    二.简单参数绑定

      》controller方法的形参上有默认使用的参数类型,直接在参数列表上书写,方法内部即可使用;比如:

        * httpservletRequest,httpservletResponse,httpSession,Model(接口),ModelMap(接口实现类);在参数绑定的过程中,通过反射的机制拿到方法形参类型进行判断,若是前面的类型,则直接参数绑定

        @RequestMapping("/editPre")
        public ModelAndView editPre(httpServletRequest req,httpServletResponse rep) {}

      》简单类型的绑定;简单类型比如有Integer,String等,直接在方法参数列表上定义简单类型,得保证请求的参数名和形参名一致才可绑定成功;如果不一致,又想进行参数绑定,可以使用一个注解@RequestParam,它可以把url的参数跟形参进行绑定,属性value的值为url参数,属性required表示该参数是否必传,属性defaultValue为默认参数值(在参数为空的情况下生效)

    @RequestMapping("/editPre")
        public ModelAndView editPre(@RequestParam(value="user_id",required = true) Integer id,defaultValue = 1) {}

      》pojo类型的绑定;在参数列表定义pojo类,只要保证url各个参数名和pojo类的属性名一致,即可创设置进去

      》自定义类型的绑定;像刚才所说的日期类型转换需要我们自定义,经自定义的参数绑定组件后的日期类型得跟方法的日期类型或pojo对象里的日期类型一致

        1.适配器需要调用参数绑定组件进行类型转换,所以得给适配器注册我们自定义的组件,在mvc注解标签上加一个属性,如图:

        2.conversion-service的值为自定义参数组件的工厂的id,所以我们得在ioc容器中注册参数组件工厂,在工厂里面converters集合中注册我们的转换器

      自定义的转换器得实现一个接口Converter,才能算是转换器

    三.pojo包装类型绑定

      》为什么要使用pojo包装类型来接收参数?如果上传的参数当中包含用户,订单,支付等信息用一个pojo类接收,这个pojo的属性就变得特别杂!通过pojo的包装类型来接收的化,可以起到不同pojo类型的查询条件对象分离开,以及系统的拓展性优化

      》现在问题是:如何将页面提交的参数赋到pojo包装类中的pojo对象里的简单属性中,参数-->pojo包装对象-->pojo对象-->简单属性;可以在页面表单标签的name属性值格式设置为“pojo对象名.属性名”,即可提交进去

     

    四.数组类型绑定

      1.如果方法参数列表上直接定义数组类型,页面标签name值直接填数组形参名即可

    五.list类型绑定

      1.list类型绑定有点小特殊,不能把List类型直接暴露在参数列表上,把list对象放到pojo的包装类中,假设list的泛型为pojo类型,list<ItemsCustom>

       在页面上的name属性值书写的格式为:"list集合名[索引值].属性名",如图(下面索引写死了):

     六.map类型绑定

      跟上面从格式上差不多,直接贴图

     

  • 相关阅读:
    大数据时代之hadoop(一):hadoop安装
    求二叉树的镜像
    Python爬虫(一):基本概念
    汉字转拼音(不带音调)
    通过java类文件识别JDK编译版本号
    单机服务器支持千万级并发长连接的压力测试
    利用ansible来做tomcat应用的持续交付
    使用squid配置透明代理并对上网行为进行控制
    Linux最大文件句柄(文件描述符)限制和修改
    CentOS7.3 部署Haproxy 1.7.2
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/12992402.html
Copyright © 2020-2023  润新知