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; }