• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

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 + ",\n accounts=" + accounts
            + ",\n 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"; 
    }
    
记得快乐
posted @ 2020-10-19 10:23  Y-wee  阅读(149)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3