struts中接收数组的表单和ajax两种形式

2014-11-24 10:14:49 · 作者: · 浏览: 0

我们对于struts2中表单传值太熟悉不过了,可以传一个或多个值或者是作为一个对象的各属性传,十分简单。


但是我们要传一个数组并希望struts正确接收,怎么办


下面我将通过普通表单和ajax两种方式讲解。首先我们有如下一个实体,一个action和一个jsp。


Student.java


public class Student
{
private String name;
private String num;
}



StudentAction.java


public class StudentAction extends ActionSupport
{
private List lstStu;
}


xy.jsp


<script type="text/java script">
var stus = [];
stus.push({num:"1",name:"xy1"});
stus.push({num:"2",name:"xy2"});
stus.push({num:"3",name:"xy3"});


下面开始吧,以下代码都是写在xy.jsp的脚本区的。


普通表单形式——遍历数组,构造表单隐藏域


var htmlContent = "";
for(var i=0;i htmlContent += "";
htmlContent += "";
}


特殊情况





传单个属性时,struts可以认识,表示3个不同的student。但是传两个属性就不行了,因为struts不知道组合。不推荐。


ajax形式——遍历数组,构造json对象


var param = {};
for(var i=0;i param["lstStu[" + i + "].name"] = stus[i].name;
param["lstStu[" + i + "].num"] = stus[i].num;
}


$.ajax({
data:param
});


其实我们构建了这样一个json对象


data:{
lstStu[0].num:"1",lstStu[0].name:"xy1",
lstStu[1].num:"2",lstStu[1].name:"xy2",
lstStu[2].num:"3",lstStu[0].name:"xy3"
}


有的人说,那直接把stus数组作为data传到Action不是很方便?答案是不能这样传,这样action接收不到或者说struts不知道怎么处理传来的数组。