SpringMVC数据绑定

本文详细介绍了 Spring MVC 中的数据绑定机制,包括基本数据类型、简单对象类型、List、Set 和 Map 类型绑定的方法,并展示了如何进行复合类型的绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基本数据类型
@RequestMapping
    public void test1(String name, Integer age, Double income, Boolean isMarried, String[] interests)
    {
        System.out.println("简单数据类型绑定=========");
        System.out.println("名字:" + name);
        System.out.println("年龄:" + age);
        System.out.println("收入:" + income);
        System.out.println("已结婚:" + isMarried);
        System.out.println("兴趣:");
        for (String interest : interests)
        {
            System.out.println(interest);
        }
        System.out.println("====================");
    }

    <form action="test1.do" method="post">
        <div class="f_left">姓名:</div>
        <div class="f_left"><input name="name" value="张三"/></div>
        <div class="clear"></div>
        <div class="f_left">年龄:</div>
        <div class="f_left"><input name="age" value="20"/></div>
        <div class="clear"></div>
        <div class="f_left">收入:</div>
        <div class="f_left"><input name="income" value="100000"/></div>
        <div class="clear"></div>
        <div class="f_left">结婚:</div>
        <div class="f_left">
        <input type="radio" name="isMarried" value="true" checked="checked"/>是
        <input type="radio" name="isMarried" value="false"/>否</div>
        <div class="clear"></div>
        <div class="f_left">兴趣:</div>
        <div class="f_left">
        <input type="checkbox" name="interests" value="听歌" checked="checked"/>听歌
        <input type="checkbox" name="interests" value="书法" checked="checked"/>书法
        <input type="checkbox" name="interests" value="看电影" checked="checked"/>看电影
        </div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>


2、简单对象类型
与基本类型相拟,只不过绑定到对象上更加简洁.
@RequestMapping
    public void test2(User user)
    {
        System.out.println("简单对象类型绑定=========");
        System.out.println("名字:" + user.getName());
        System.out.println("年龄:" + user.getAge());
        System.out.println("收入:" + user.getIncome());
        System.out.println("已结婚:" + user.getIsMarried());
        System.out.println("========================");
    }

public class User {
    private String name;
    private Integer age;
    private Boolean isMarried;
    private Double income;
    private String[] interests;
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Boolean getIsMarried() {
        return isMarried;
    }
    public void setIsMarried(Boolean isMarried) {
        this.isMarried = isMarried;
    }
    public Double getIncome() {
        return income;
    }
    public void setIncome(Double income) {
        this.income = income;
    }
    public String[] getInterests() {
        return interests;
    }
    public void setInterests(String[] interests) {
        this.interests = interests;
    }
}

<form action="test2.do" method="post">
        <div class="f_left">姓名:</div>
        <div class="f_left"><input name="name" value="lxf"/></div>
        <div class="clear"></div>
        <div class="f_left">年龄:</div>
        <div class="f_left"><input name="age" value="20"/></div>
        <div class="clear"></div>
        <div class="f_left">收入:</div>
        <div class="f_left"><input name="income" value="100000"/></div>
        <div class="clear"></div>
        <div class="f_left">结婚:</div>
        <div class="f_left">
        <input type="radio" name="isMarried" value="true" checked="checked"/>是
        <input type="radio" name="isMarried" value="false"/>否</div>
        <div class="clear"></div>
        <div class="f_left">兴趣:</div>
        <div class="f_left">
        <input type="checkbox" name="interests" value="听歌" checked="checked"/>听歌
        <input type="checkbox" name="interests" value="书法" checked="checked"/>书法
        <input type="checkbox" name="interests" value="看电影" checked="checked"/>看电影
        </div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>


3、List类型绑定
关键在于,List需要绑定在对象,直接写在request-mapping函数的参数是不行的,更重要的一点是要创建对象(ArrayList).
@RequestMapping
    public void test3(Club club)
    {
        System.out.println("list类型绑定=========");
        System.out.println("会员:");
        for (User user : club.getUsers())
        {
            System.out.println(user.getName());
        }
        System.out.println("========================");
    }

public class Club {
    private List<User> users = new ArrayList<User>();
 
    public List<User> getUsers() {
        return users;
    }
 
    public void setUsers(List<User> users) {
        this.users = users;
    }
}

<form action="test3.do" method="post">
        <div class="f_left">会员1号:</div>
        <div class="f_left">
        <input name="users[0].name" value="张三"/>
        </div>
        <div class="clear"></div>
        <div class="f_left">会员2号:</div>
        <div class="f_left">
        <input name="users[1].name" value="李四"/>
        </div>
        <div class="clear"></div>
        <div class="f_left">会员3号:</div>
        <div class="f_left">
        <input name="users[2].name" value="王五"/>
        </div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>


4、Set类型绑定
与List类型相似,经测试表明,绑定Set数据时,必须先在Set对象中Add相应的数量的模型对象.
@RequestMapping
    public void test4(Club2 club)
    {
        System.out.println("set类型绑定=========");
        System.out.println("会员:");
        for (User user : club.getUsers())
        {
            System.out.println(user.getName());
        }
        System.out.println("========================");
    }

public class Club2 {
    private Set<User> users = new LinkedHashSet<User>();
 
    public Club2() {
        users.add(new User());
        users.add(new User());
        users.add(new User());
    }
 
    public Set<User> getUsers() {
        return users;
    }
    public void setUsers(Set<User> users) {
        this.users = users;
    }
}

<form action="test4.do" method="post">
        <div class="f_left">会员1号:</div>
        <div class="f_left">
        <input name="users[0].name" value="张三"/>
        </div>
        <div class="clear"></div>
        <div class="f_left">会员2号:</div>
        <div class="f_left">
        <input name="users[1].name" value="李四"/>
        </div>
        <div class="clear"></div>
        <div class="f_left">会员3号:</div>
        <div class="f_left">
        <input name="users[2].name" value="王五"/>
        </div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>


5、Map类型绑定
最灵活的一种方式,可无限绑定未定义的参数,注意必须绑定在对象下
@RequestMapping
    public void test5(UserForm userForm)
    {
        System.out.println("Map类型绑定=========");
        System.out.println("名字:" + userForm.getUser().get("name"));
        System.out.println("年龄:" + userForm.getUser().get("age"));
        System.out.println("收入:" + userForm.getUser().get("income"));
        System.out.println("已结婚:" + userForm.getUser().get("isMarried"));
        System.out.println("========================");
    }

public class UserForm {
    private Map<String, String> userMap = new LinkedHashMap<String, String>();
    private User user = new User();
 
    public Map<String, String> getUserMap() {
        return userMap;
    }
    public void setUserMap(Map<String, String> userMap) {
        this.userMap = userMap;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

<form action="test5.do" method="post">
        <div class="f_left">姓名:</div>
        <div class="f_left"><input name="user['name']" value="张三"/></div>
        <div class="clear"></div>
        <div class="f_left">年龄:</div>
        <div class="f_left"><input name="user['age']" value="20"/></div>
        <div class="clear"></div>
        <div class="f_left">收入:</div>
        <div class="f_left"><input name="user['income']" value="100000"/></div>
        <div class="clear"></div>
        <div class="f_left">结婚:</div>
        <div class="f_left">
        <input type="radio" name="user['isMarried']" value="true" checked="checked"/>是
        <input type="radio" name="user['isMarried']" value="false"/>否</div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>


6、复合类型绑定
@RequestMapping
    public void test6(UserForm userForm)
    {
        System.out.println("复合类型绑定=========");
        System.out.println("名字:" + userForm.getUser().getName());
        System.out.println("年龄:" + userForm.getUser().getAge());
        System.out.println("收入:" + userForm.getUser().getIncome());
        System.out.println("已结婚:" + userForm.getUser().getIsMarried());
        System.out.println("========================");
    }

public class UserForm {
    private Map<String, String> userMap = new LinkedHashMap<String, String>();
    private User user = new User();
 
    public Map<String, String> getUserMap() {
        return userMap;
    }
    public void setUserMap(Map<String, String> userMap) {
        this.userMap = userMap;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
 }

    <form action="test6.do" method="post">
        <div class="f_left">姓名:</div>
        <div class="f_left"><input name="user.name" value="张三"/></div>
        <div class="clear"></div>
        <div class="f_left">年龄:</div>
        <div class="f_left"><input name="user.age" value="20"/></div>
        <div class="clear"></div>
        <div class="f_left">收入:</div>
        <div class="f_left"><input name="user.income" value="100000"/></div>
        <div class="clear"></div>
        <div class="f_left">结婚:</div>
        <div class="f_left">
        <input type="radio" name="user.isMarried" value="true" checked="checked"/>是
        <input type="radio" name="user.isMarried" value="false"/>否</div>
        <div class="clear"></div>
        <div><input type="submit" value="提交表单"/></div>
    </form>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值