zoukankan      html  css  js  c++  java
  • springmvc中请求参数的绑定

    springmvc中请求参数的绑定

    我们都知道,表单中请求参数都是基于 key=value 的。

    SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。

    1、绑定机制

    • 表单提交的数据都是k=v格式的 username=haha&password=123
    • SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
    • 要求:提交表单的name和参数的名称是相同的

    2、支持的数据类型

    • 基本数据类型和字符串类型
    • 实体类型(JavaBean)
    • 集合数据类型(List、map集合等)

    SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求。

    3、使用要求

    基本类型或者String类型

    • 参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)

      jsp代码

      <!-- 基本类型示例 --> 
      <a href="account/findAccount?accountId=10&accountName=zhangsan">查询账户</a>
      

      控制器代码

      /**
      * 查询账户
      * @return
      */
      @RequestMapping("/findAccount")
      public String findAccount(Integer accountId,String accountName) {
      	System.out.println("查询了账户。。。。"+accountId+","+accountName);
      	return "success"; 
      }
      

    POJO类型或者它的关联对象

    • 表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。

    • 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:

      address.name

      实体类代码

      /*
       *账户实体类
       */
      public class Account implements Serializable {
          private Integer id;
          private String name;
          private Float money;
          private Address address;
          //getters and setters
          }
        
      /*
       *地址实体类
       */
      public class Address implements Serializable {
          private String provinceName;
          private String cityName;
          //getters and setters
      }
      

      jsp代码

      <!-- pojo 类型演示 -->
      <form action="account/saveAccount" method="post">
          账户名称:<input type="text" name="name" ><br/>
          账户金额:<input type="text" name="money" ><br/>
          账户省份:<input type="text" name="address.provinceName" ><br/>
          账户城市:<input type="text" name="address.cityName" ><br/>
          <input type="submit" value="保存">
      </form>
      

      控制器代码

      /**
      * 保存账户
      * @param account
      * @return
      */
      @RequestMapping("/saveAccount")
      public String saveAccount(Account account) {
      	System.out.println("保存了账户。。。。"+account);
      	return "success";
      }
      

    集合类型

    • 集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。

      • 给 List 集合中的元素赋值,使用下标。

        JSP页面编写方式:list[0].属性
        
      • 给 Map 集合中的元素赋值,使用键值对。

      实体类代码

      /**
      * 用户实体类
      * @author 黑马程序员
      * @Company 
      * @Version 1.0
      */
      public class User implements Serializable {
          private String username;
          private String password;
          private Integer age;
          private List<Account> accounts;
          private Map<String,Account> accountMap;
          //getters and setters
          @Override
          public String toString() {
              return "User [username=" + username + ", password=" + password + ", age="
              + age + ",
       accounts=" + accounts
              + ",
       accountMap=" + accountMap + "]";
      	} 
      }
      

      jsp代码

      <!-- POJO 类包含集合类型演示 -->
      <form action="account/updateAccount" method="post">
          用户名称:<input type="text" name="username" ><br/>
          用户密码:<input type="password" name="password" ><br/>
          用户年龄:<input type="text" name="age" ><br/>
          账户 1 名称:<input type="text" name="accounts[0].name" ><br/>
          账户 1 金额:<input type="text" name="accounts[0].money" ><br/>
          账户 2 名称:<input type="text" name="accounts[1].name" ><br/>
          账户 2 金额:<input type="text" name="accounts[1].money" ><br/>
          账户 3 名称:<input type="text" name="accountMap['one'].name" ><br/>
          账户 3 金额:<input type="text" name="accountMap['one'].money" ><br/>
          账户 4 名称:<input type="text" name="accountMap['two'].name" ><br/>
          账户 4 金额:<input type="text" name="accountMap['two'].money" ><br/>
          <input type="submit" value="保存">
      </form>
      

      控制器代码

      /**
      * 更新账户
      * @return
      */
      @RequestMapping("/updateAccount")
      public String updateAccount(User user) {
      	System.out.println("更新了账户。。。。"+user);
      	return "success";
      }
      

      数组类型

      页面的参数名要相同

      jsp代码

      <form action="${pageContext.servletContext.contextPath}/saveuser2"> 
          兴趣:<input type="checkbox" value="足球" name="funs"/>
          足球<input type="checkbox" value="音乐" name="funs"/>
          音乐<input type="checkbox" value="看书" name="funs"/>
          看书 <input type="submit" value="提交"/> 
      </form>
      

      控制器代码

      @RequestMapping("/saveuser2") 
      public String saveuser2(String []funs) {
          for(String fun:funs) { 
              System.out.println(fun);
          }
          return "success"; 
      }
      
    记得快乐
  • 相关阅读:
    Elasticsearch集群+kibana
    kafka集群搭建
    Zookeeper集群搭建
    Hadoop+Hbase+Zookeeper分布式存储构建
    正则文本处理
    Haproxy+keepalived高可用集群实战
    httpsqs消息队安装
    LVS-TUN模式
    一.4.序列化使用之机柜资源及序列化高级用法
    一.3.序列化使用之idc资源与api文档
  • 原文地址:https://www.cnblogs.com/Y-wee/p/13838841.html
Copyright © 2011-2022 走看看