SpringMVC-from表单数据绑定

form表单数据绑定实例

第一个:使用requestbody
前端:

<form action="testrequestbody" method="post">
    用户名:<input type="text" name="username"/><br/>
    密码: <input type="text" name="password"/><br/>
    <input type="submit" value="提交"/>
</form>

后端

    @RequestMapping(value = "/testrequestbody", produces="text/html;charset=UTF-8")
    public String testrequestbody(@RequestBody String body) throws UnsupportedEncodingException {
        String encode = URLDecoder.decode(body,"utf-8");
        System.out.println("requestBody测试");
        System.out.println(encode);
        return "success";
    }

第二个:直接使用实体类
实体类自行 实现getter和setter和tostring方法

public class User {
    private String username;
    private String password;
    private Date birthday;
}

前端

<form action="test" method="post">
    用户名:<input type="text" name="username"/><br/>
    密码: <input type="text" name="password"/><br/>
    <input type="submit" value="提交"/>
</form>

后端

    @RequestMapping("/test")
    public String test(User user){
        System.out.println(user);
        return "success";
    }

第三个:请求参数绑定,封装到类,list,map
实体类

  • Account类:自行 实现getter和setter和tostring方法
public class Account {
    private String username;
    private String password;
    private double money;
    private User user;

    private List<Account> accounts;
    private Map<String,User> map;
}
  • User类: 自行 实现getter和setter和tostring方法
public class User {
    private String username;
    private String password;
    private Date birthday;
}

前端

<form action="testbeanMapList" method="post">
    用户名:<input type="text" name="username"/><br/>
    密码: <input type="text" name="password"/><br/>
    价格: <input type="text" name="money"/><br/>

    user名:<input type="text" name="user.username"/><br/>
    user密:<input type="text" name="user.password"/><br/>

    list测试名:<input type="text" name="accounts[0].username"/><br/>
    list测试密:<input type="text" name="accounts[0].password"/><br/>

    map测试名:<input type="text" name="map['one'].username"/><br/>
    map测试密:<input type="text" name="map['one'].password"/><br/>
    <input type="submit" value="提交"/>
</form>

后端

    @RequestMapping("/testbeanMapList")
    public String  testListMap(Account account){
        System.out.println("请求绑定参数List,Map");
        System.out.println(account);
        return "success";
    }

第四个:前端提交同类多条数据放在list中
实体类: 自行 实现getter和setter和tostring方法
在这里插入图片描述前端

<form action="testUsers" method="post">
    <tr>
        <td>账号</td>
        <td>密码</td>
    </tr>
    <br>
    <tr>
        <td><input name="users[0].username" value="aaa" /></td>
        <td><input name="users[0].password" value="a666" /></td>
    </tr>
    <br>
    <tr>
        <td><input name="users[1].username" value="bbb" /></td>
        <td><input name="users[1].password" value="b666" /></td>
    </tr>
    <br>
    <tr>
        <td><input name="users[2].username" value="ccc" /></td>
        <td><input name="users[2].password" value="c666" /></td>
    </tr>
    <input type="submit" value="Save" /></td>
</form>

三组数据
在这里插入图片描述
后端控制器

    @RequestMapping("/testUsers")
    public String testUsers(Users users){
        for (Users user:users.getUsers()){
            System.out.println(user.getUsername()+"-"+user.getPassword());
        }
        return "success";
    }

结果:后台能拿到数据
在这里插入图片描述
spring会创建一个以最大下标值为size的List对象,所以,如果表单中有动态添加行、删除行的情况,就需要特别注意

第五个:前端提交同类多条数据Set绑定(同list差不多)
实体类自行 实现getter和setter和tostring方法

public class Users {
    private String username;
    private String password;
    }

编写set方法
其中users.add()有几个,前端只能有几个。个数一定要对应

public class UserSetForm {
    private Set<User> users = new HashSet<User>();

    public UserSetForm() {
        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="testUserSet" method="post">
    <tr>
        <td>账号</td>
        <td>密码</td>
    </tr>
    <br>
    <tr>
        <td><input name="users[0].username" value="aaa" /></td>
        <td><input name="users[0].password" value="a666" /></td>
    </tr>
    <br>
    <tr>
        <td><input name="users[1].username" value="bbb" /></td>
        <td><input name="users[1].password" value="b666" /></td>
    </tr>
    <br>
    <tr>
        <td><input name="users[2].username" value="ccc" /></td>
        <td><input name="users[2].password" value="c666" /></td>
    </tr>
    <input type="submit" value="Save" /></td>
</form>

后端Controller代码:

@RequestMapping("/testUserSet")
public void test(UserSetForm userForm) {
        for (Users user:users.getUsers()){
            System.out.println(user.getUsername()+"-"+user.getPassword());
        }
        return "success";
    }

需要特别提醒的是,如果最大下标值大于Set的size,则会抛出org.springframework.beans.InvalidPropertyException异常。所以,在使用时有些不便。

第六个:前端提交同类多条数据Map
实体类自行 实现getter和setter和tostring方法
在这里插入图片描述
前端:
在这里插入图片描述
控制器controller

@RequestMapping("/testUsers")
public String testUsers(Users users){
    for (Map.Entry<String, Users> user:users.getUsersMap().entrySet()){
        System.out.println(user.getKey() + ": " + user.getValue().getUsername() + " - " +
                user.getValue().getPassword());
    }
    return "success";
}

结果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值