首先申明,写此博客,是为了以防我之后忘记,所以作为记录使用,喜欢勿喷。
前提: 由于在做银企直连项目的时候,只有一个工具来发送和接收返回报文,在开发人员开发是,使用main方法来测试,那么在移交到测试组测试的时候就没法测试,很困难。在行方提议下,我使用SpringMVC+mybaties开发一个测试的应用web,以方便测试使用,在项目进行时,需要提交from表单数据到后台,组装成相应的报文,发送到目标系统,这是就遇到一个问题,不关需要表单中的输入数据,同时表当中还需要提交list,相信大家都知道SpringMVC中是不支持直接提交list集合的,直接使用<input name="list[index].XXX" value="">就行不通,提交过去的数据类似于list[0].xxx=value,这样是无法使用list来接收,也不好转化成list集合,这时,就会想,既然不支持list和map,支持对象,我们定义一个对象,属性值定义list集合,再给属性赋值不就可以了吗?得到进一步的想法后,开始写代码,定义对象
public class CommList {
private List<Map<String, String>> list;
public List<Map<String, String>> getList() {
return list;
}
public void setList(List<Map<String, String>> list) {
this.list = list;
}
}
使用form提交,如果只有自定义的list属性,能够提提交过去,其余的值就不行,此方法不满足需求,需要不但是表单中其他输入框的值,那么改用ajaxt交,首先系列化表单, var data=$("#submitFrm").serialize();并将list组装好,var list = new Array();
for(var i=0;i<$("#BillList").find("tr").length;i++){
if($("#billMoney"+i).val()!="" && parseFloat($("#billMoney"+i).val())){
list.push({"billMoney":$("#billMoney"+i).val()});
list.push({"billNum":1});
}
}
通过data:{data:data;list:list}提交,这时,data有值,list也有值,注意到 这时,系列化的表单是一个字符串,request.getParameter()就拿不到任何值,那就和共用拼报文的方法需要拿到name来生成xml节点不相符,又不能改方法,那么这个方法就行不通,pass。百度,然鹅,并没有卵用,没有找打类似的情况,怎么办,这时就只能找大神帮忙啊,大神也是同样的思路,都不行。经过分析 ,js定义一个对象obj,将list组装的数据给obj,即 obj.list=list,同时再把系列化后的表单中的数据也同样通过遍历,给对象obj,即 $.each(data,function(item){
obj[data[item].name]=data[item].value;
});
这时候在使用,ajax提交, $.ajax({
type: "POST",
dataType: 'json',
url:"xxx"
data:obj,
............................
} 见证奇迹,断点一看,list有值,激动,那request.getParameter()如果有值,此方法就成功,赶紧获取里面的值看看,我去!既然真拿到了,这样list传过去了,同时表单中的数据通过request.getParameter()也那拿到了,那问题就解决了,这时就想,如果不需要将遍历的表单数据都赋值给obj,而是放到map中,再把map给obj,已同样的方式提交,这样就可以满足以后无论是使用list,还是map都可以提交,不用再去管Parameter中有没有值,修改
public class CommList {
private List<Map<String, String>> list;
private Map<String, String> map;
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public List<Map<String, String>> getList() {
return list;
}
public void setList(List<Map<String, String>> list) {
this.list = list;
}
} 经过测试 ,成功通过。
希望 能帮我通过一下,不是说可以帮到一些人,希望自己以后忘记能够找到看的地方。谢谢!