经常会碰到list<class>这样格式的数据传输,这里我总结一下前后台传复杂list的写法,供大家参考。
1、前台向后台传:
js部分:
<script>
/*** 按后台格式 list<class>组json,纯js ***/
var lists = new Array(); //定义一个数组格式,相当于最外层的list
for(var i = 1; i <= 2; i++) { //list里有几个class就循环几次,这里只示例2次
var classRecode = {}; //定义一个数组格式,相当于class对象
classRecode.minValue = "minValue"; //class里有什么属性,就按这个格式添加
classRecode.maxValue = "maxValue";
lists.push(classRecode); //将一个class放入list
}
var returnValue = JSON.stringify(lists)); //将list转成json格式,此时的returnValue既可传往后台,也可在html页面中赋值。
</script>
java部分:
String ruleLists = returnValue; //以String格式接收returnValue,用框架也好request.getparameter()也好自己处理。 List
<EbtFundRateRule> ruleList = JSONArray.parseArray(ruleLists, EbtFundRateRule.class);//JSONArray.parseArray直接将json转成带class格式的list
2、后台向前台传
java部分:
List<EbtFundRateRule> list = ebtProFund.getRuleList();//随便列举一个带class的list
mav.addObject("ruleListView", JSONArray.toJSON(list));//JSONArray.toJSON(list)将list转为json,就可以直接传到前台了。
<script>
var ruleListView = JSON.parse('$!{ruleListView}'); //接收json,这里只列举velocity的例子
for(var i = 0; i < ruleListView.length; i++) { //遍历list
var obj = ruleListView[i]; //取出list里的一个值
alert(obj.minValue); //取出每个对象里面的属性
alert(obj.maxValue);
}
</script>
好了,就这些,这样list前后台传值问题就解决了。
实际使用时还有一种方法是ajax的方法来传,因为ajax直接就是传的json,所以直接取返回data里的数据就能用了。十分简单,不多说。
我这里的写法主要是原生的js,从源头上解析怎么组装成list的数据格式,大家看看就好。