jsp页面 ajax提交数组 到struts2的action

最近工作用到提交表格中的数据到action(没有表单)。经过几番尝试之后确定可以用下面方法将jsp页面的js数组提交到action

function submits(){
        var mainTable=document.getElementById("mainTable");
        var trs= mainTable.rows;
        var tr=null;
        var data=new Array();
        var flag=false;
        for(var i=1;i<trs.length;i+=2){
            tr=trs[i].cells;
            var d=new Array();
            for(var j=0;j<tr.length;j+=2){
                if(tr[j].style.backgroundColor=="rgb(255, 255, 119)"){
                    if(!flag){
                        //行坐标(人员)
                        d.push(((i-1)/2));
                        //列坐标(房间)
                        d.push((j/2));
                        //数值(N/Y)
                        d.push(tr[j].innerHTML);
                        flag=true;
                    }else{
                        //列坐标(房间)
                        d.push((j/2));
                        //数值(N/Y)
                        d.push(tr[j].innerHTML);
                    }
                }
            }
            if(d.length>0){
                data.push(d);
            }
            flag=false;
        }
      //序列化数据 var params
=$.param({'datas':data},true); $.ajax({ type:"POST", url:"accessControl_updateAccessControl.htm", data:params, dataType:'json', success:function(msg){ alert(msg); } }); }
$.param({'datas':data},true);这个方法很重要   提交前需要序列化
然后接下来就按照Struts2的特性 在action中写好属性 写好getter setter方法

    private List<Object[]> datas;
    
    public List<Object[]> getDatas() {
        return datas;
    }
    public void setDatas(List<Object[]> datas) {
        this.datas = datas;
    }

之后就可以直接在ajax提交的url的方法中直接得到数据很方便

//修改门禁信息表
    public String updateAccessControl() {
//        System.out.println("过来了");
        List<EmployeeInfo> list=accessControlService.findAllDoorCheckDto();
        List<Room> roomList=accessControlService.findAllRoom();//当前数据库所有房间信息
        int pIndex=0;
        EmployeeInfo emp=null;
        int rIndex=0;
        String rStatus=null;
        Room room=null;
        for(Object[] data:datas){//遍历提交上来的每行数据
            System.out.println(Arrays.toString(data));
            if(data.length>0){
                pIndex=(Integer) data[0];
                emp=list.get(pIndex);
                for(int i=1;i<data.length;i+=2){
                    rIndex=(Integer) data[i];
                    room=roomList.get(rIndex);
                    rStatus=(String) data[i+1];
                }
            }
            
        }
        
        return NONE;
    }
原文地址:https://www.cnblogs.com/zhixw/p/6772826.html