form表单向后端提交数据后端用List接收

在项目中需要使用批量操作的时候,后端就需要用List<实体类>进行接收数据,前台数据如下:

<form id="formId" action="/Test_a/insert" method="post">
<table id="tab">
    <tr>
        <td>编号</td>
        <td>日期</td>
        <td>姓名</td>
    </tr>
    <th:block th:each="test:${aList}">
        <tr>
            <td class="testId" th:text="${test.id}"></td>
            <td><input name="createdate" class="createdate" th:value="${#dates.format(test.createdate,'yyyy-MM-dd')}"></td>
            <td><input name="username" class="username" id="username" th:value="${test.username}"></td>
        </tr>
    </th:block>
    <tr>
        <td>
            <input type="submit" id="add" value="添加">
        </td>
    </tr>
</table>
</form>

s本页面的数据是从数据库里查询出来的,然后遍历在文本框内,实际数据如下:

在这里插入图片描述
因为同一个文本中可能会遍历出来多值,存放的数据就如同数组一样。如果使用form表单提交的话,后台用List<实体类>接收会报:

java.lang.NoSuchMethodException: java.util.List.<init>()

意思是指定不明需要在List<实体类>前面加上@RequestBody注解,如下:

public String insert(@RequestBody List<Test_a> test_a) {}

但又会报错:报错结果是:

HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

报这个错的意思是:form表单提交数据默认的格式是:application/x-www-form-urlencoded;charset=UTF-8,只能处理不带嵌套类型JSON,而我们这表单提交的数据是遍历数据,也就是嵌套的,所以需要想办法把需要传递给后端的数据变成application/json这种格式,所以使用ajax。

$("#add").click(function () {
    //遍历input框里的值
    var username = new Array();
    var i = 0;
    $('.username').each(function(){
        username[i] = $(this).val();
        i = i+1;
    });
    var createdate = new Array();
    var i = 0;
    $('.createdate').each(function(){
        createdate[i] = $(this).val();
        i = i+1;
    });
    //把测试返回的结果放到外面,这样就不会受for循环的影响
    var bol=false;
    bol=alert("测试成功")
    //把input框里的值循环出来,并提交
    for (var i=0;i<username.length;i++) {
        for (var i=0;i<createdate.length;i++) {
            var aa = {username: username[i],createdate:createdate[i]};
            var goodsList = new Array();
            goodsList.push(aa);
            var data = JSON.stringify(goodsList);
            $.ajax({
                type:'post',
                url:'/Test_a/insert',
                data:data,
                contentType : 'application/json',
                success:function (data) {
                   bol=true;
                }
            })
        }
    }
})

controller层接收

 public String insert(@RequestBody List<Test_a> test_a) {
        System.out.println(test_a);
        }

打印结果为:

[Test_a{id=null, createdate=Thu Mar 14 08:00:00 CST 1991, username='44'}]
[Test_a{id=null, createdate=Fri Mar 14 08:00:00 CST 1997, username='44'}]
[Test_a{id=null, createdate=Sat Mar 14 08:00:00 CST 1998, username='44'}]
[Test_a{id=null, createdate=Fri Mar 14 08:00:00 CST 1997, username='44'}]

这样实体类接收就可以接收到数据了,既然接收到了,数据就然后结合mybatis的批量标签,就可以完成批量操作了。

其余方法设想

1、把这些数据全部放入缓存中,需要传递给后端的时候就只传递一组Id,后端通过id取出缓存中的数据,然后进行操作。
2、如果不使用缓存,同理,直接操作数据库,也只需要传递一组id给后端,后端批量查询出来使用即可。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值