最近工作用到提交表格中的數據到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; }
