zoukankan      html  css  js  c++  java
  • (八)springMvc 的参数绑定


    参数绑定

    将客户端传来的 key/value 数据,绑定到 Controller 参数的过程 ;

    这一过程发生在调用 处理器适配器 的时候,spring 会去调用 参数绑定 组件,我使用的版本(4.5),是使用 converter 进行任意支持类型的转换的,除去一些 时间 不能进行转换 ;

    其实 spring 中内置了许多的 converter ,可以看做是转换器,帮我们进行参数绑定 ;

    1. 默认支持类型

      默认支持的类型:HtppServletRequestHtppServletResponseHttpSessionModel或ModelMap ;当 springMvc 发现 Controller 方法的形参是上面的类型时,就会调用响应的 converter 进行参数绑定 ;

    2. 对简单类型的支持

      controller 方法形参是简单类型的时候,SpringMvc 也会进行参数绑定,不过有个限制,形参的名字和 key 的名字要一样 ;

      对于,这样的限制,我们当然不能忍受了,我们才是 code world 的掌控者,怎么能受限于一个参数绑定,这时候可以使用 @RequestParam来破掉这一限制 ;

      @RequestParam 参数讲解:

      name :当形参名字和 key 不一样的时候 ,使用 name 来告诉 springMvc 给我进行参数绑定,按照和 name 相同的 key

      required : 表示形参是否是必须的 ,如果 不是必须的,则可以不传参数进来 ;

      defaultValue :默认值 ,如果形参没有参数传进来,则使用该默认值 ;

    3. pojo类型

      页面中提交的数据的名字,必须和 pojo 的属性名一致 ;页面中提交的数据的名字,必须和 pojo 的属性名一致 ;

      比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name ;比如,pojo 中有个 name 属性,那么页面中的对应数据想要参数绑定到 pojo 对象中,则 key 必须也是 name

    4. 自定义参数绑定

      对于一些情况下 , 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>
      
    5. 包装类型 pojo 参数绑定

      其实和 pojo 类型一样 ;

      只是包装类型的 pojo 中嵌套着 pojo ,此时赋值,使用 嵌套的pojo.属性名 ,作为网页的 name 属性的值 ;

      <input id="itemName" type="text" name="itemCustomer.name"/>
      

      尽量使用包装类型,便于扩展,解决不同类之间属性重名问题 ,比如形参有 userbook ,它们都有属性 name,此时页面中就可以使用pojo.name 为它们赋值;

    6. 数组绑定

      形参是数组的时候,跟基本数据类型一样,形参的名字 和 网页 name 值一样;

    7. list 绑定

      list 绑定,将 list 放在 pojo 中进行绑定,也就是 pojo 中属性为 list,此时形参还是一个包装的 pojo

      要将数据提交到 list 中的对象的属性上,只需要将网页的 name 的值,设为 list[下标].属性

    8. map 绑定

      还是将 map 放在 pojo 中进行绑定,网页上的 name 属性的值为 map['key']

  • 相关阅读:
    第009讲:了不起的分支和循环3
    Term_Application
    十大编程算法助程序员走上高手之路
    每天工作4小时的程序员
    编程真相_节选
    Sublime_Snippet
    VIM资源管理
    微信企业号开发资源整理
    vitruviano
    VIM_git
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665657.html
Copyright © 2011-2022 走看看