java后台接收前端对象数组

应用场景:盘点需要批量修改,如图所示

java后台接收前端对象数组_第1张图片
当我点击盘点的时候需要获取form表单中的批量数据;

思路:首先,各位肯定知道我们如何传递一个常用类型的数组对象,比如String[] strs、Integer[] ids之类的对象,最常见的操作,批量删除!同样,传递对象数组一样的道理,以对象为单位,比如VoStudent对象,包含两个域String name和int age,那么我们前端传JSON格式的字符串数组对象就好了。DEMO:var argument = '[{"age":"1","name":"李四"},{"age":"2","name":"张三"}]';而后端接收使用@RequestBody List voStudnetList 来接收数据;

实现方案1):

java后台接收前端对象数组_第2张图片


 

实现方案2):如果是表单的话是需要处理的,下面直接贴方法,函数serializeJson()可以直接用,嫌麻烦直接拿去用

//将表单序列化成json格式的数据(但不适用于含有控件的表单,例如复选框、多选的select)
    (function($){
      $.fn.serializeJson = function(){
        var jsonData = {};
        var serializeArray = this.serializeArray();
        $(serializeArray).each(function () {
          if (jsonData[this.name]) {
            if ($.isArray(jsonData[this.name])) {
              jsonData[this.name].push(this.value);
            } else {
              jsonData[this.name] = [jsonData[this.name], this.value];
            }
          } else {
            jsonData[this.name] = this.value;
          }
        });
        var vCount = 0;
        for(var item in jsonData){
          var tmp = $.isArray(jsonData[item]) ? jsonData[item].length : 1;
          vCount = (tmp > vCount) ? tmp : vCount;
        }
        if(vCount > 1) {
          var jsonData2 = new Array();
          for(var i = 0; i < vCount; i++){
            var jsonObj = {};
            for(var item in jsonData) {
              jsonObj[item] = jsonData[item][i];
            }
            jsonData2.push(jsonObj);
          }
          return JSON.stringify(jsonData2);
        }else{
          return "[" + JSON.stringify(jsonData) + "]";
        }
      };
    })(jQuery);


    //批量处理
    $('#inventoryListSubmit').click(function(){
        var data = $('#inventoryForm').serializeJson();

        $.ajax({
               url: '${ctx}/abc/updateInventoryFormList',
            type: 'POST',
            data: data,
            dataType:'json',
            contentType:'application/json;charset=utf-8',
            success: function (data) {
                if(data.status){
                    $.Pro(data.info);
                    setTimeout("goBack()",1000); 
                }else{
                    $.Pro('网络错误');
                }
                disabledBtn("#cancel");
            },
            error: function (data) {
                console.log(data.status);
            }
        });
    });

后台接收和上面demo一样的!

你可能感兴趣的:(js问题集)