Spring MVC接收列表形式的表单提交

需求

在开发中我们有时会遇到这样的需求。需要提交的表单是一个列表,每一行都有相同的元素,而且行可以进行添加,最后将他们同时提交。

比如我们要开发一个批量增加用户名密码的程序。通过点击添加按钮就会多出一组用户名密码输入框,最后将他们一起提交到后台。

132349_KaIS_3452433.png

代码

页面

在页面中每组相同的元素,都使用相同的name名字来表示,并在name名字后面加“[0]”这样的编号。

如:用户名:<input type="text" name="username[0]" />&nbsp;&nbsp;密码:<input type="text" name="password[0]" /><br/>

页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>add user</title>
</head>
<body>
    <form id="inputForm" name="inputForm" action="/save"  method="post">
        <div id="groups">
            <!-- 通过js动态添加输入框 -->
            <!-- 例如:用户名n:<input type="text" name="username[n]" />&nbsp;&nbsp;密码n:<input type="text" name="password[n]" /><br/> -->
        </div>
        <button type="button" onclick="add()" >添加</button>
        <button type="submit" >提交</button>
    </form>
</body>
<script type="text/javascript">
    var number = 0; //计数
    function add(){
        var newchild = document.createElement("p");
        var group = '用户名'+number+':<input type="text" name="username['+number+']" />&nbsp;&nbsp;密码'+number+':<input type="text" name="password['+number+']" /><br/>';
        newchild.innerHTML = group;
        var groups = document.getElementById("groups");
        groups.appendChild(newchild);
        number++;
    }
</script>
</html>

 

实体

创建接收数据的实体,实体属性为数组类型,并且名称与表单元素name一致。

package pub.imlichao;

public class User {
    private String[] username;
    private String[] password;

    public String[] getUsername() {
        return username;
    }

    public void setUsername(String[] username) {
        this.username = username;
    }

    public String[] getPassword() {
        return password;
    }

    public void setPassword(String[] password) {
        this.password = password;
    }
}

 

Controller

使用接收数据的实体接收表单数据。spring mvc会将页面相同名字的数据,以数组方式放在数据对象属性中。

package pub.imlichao;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class BusinessLogic {
    @GetMapping(value = "/")
    public String index(){
        return "index";
    }

    @PostMapping(value = "/save")
    public String save(User user){
        //获取元素数量
        int length = 0;
        if(user.getUsername() != null){
            length = user.getUsername().length;
        }
        //循环列表
        for(int i=0;i<length;i++){
            String username = user.getUsername()[i];
            String password = user.getPassword()[i];
            System.out.println("用户名"+i+":"+username+"  密码"+i+":"+password);
        }

        return "redirect:/";
    }
}

 

 

转载于:https://my.oschina.net/u/3452433/blog/1490383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值