struts与常用的dataTables和jqueryGrid等表格进行ajax传值时,经常会传值不适配的问题,这是因为struts在进行ajax操作时已经对你要操作的json数据进行了处理,所以不需要再在action中转换为json字符串以jqueryGrid为例
1.action中的代码如下:
首先得到jqueryGrid需要的各个属性值,totals,pages,page,rows,这些属性我在前台进行的一些转换,所以代码中的属性名称与这些属性名有些差异,将得到的属性值放在一个action中定义的map集合中
setMap(this.getJsonMap(totalPages, getPage(), totalRecord, equipList)); public Map<String, Object> getJsonMap(int totalpages, int currentpage, int totalrecords, List data){ Map<String, Object> map = new HashMap<String, Object>(); map.put("totalpages", totalpages); map.put("currentpage", currentpage); map.put("totalrecords", totalrecords); map.put("data", data); return map; }
2.struts配置文件中的代码
其中的root为action返回结果中传到前台的变量,这里strus已经帮我们转换了,所以无需再自己写转换为字符串的代码,如何不写root,则会将action中所有的变量都转换为json对象
<action name="equipInfo" class="com.audiovisualcenter.action.EquipManagerAction" method="equipManager"> <result name="success" type="json"> <param name="root">map</param> </result> </action>
3.前台的表格一般都需要json对象,所以可以直接适配
下面是我的前台js代码,为了方便,只粘贴了部分代码
$("#grid-table").jqGrid({ jsonReader : { root:"data", page: "currentpage", total: "totalpages", records: "totalrecords", repeatitems: false, }, url:"equipInfo", datatype: "json", mtype:"post", height: 400, colNames:['操作','序号','名称','编号', '总数','类型','状况'], colModel:[ {name:'myac',index:'', 80, fixed:true, sortable:false, resize:false}, {name:'id',index:'id', 60, sortable:false,editable: false}, {name:'name',index:'name',90, editable:true, sorttype:"date",/*unformat: pickDate*/}, {name:'no',index:'no', 90,editable: true,editoptions:{size:"20",maxlength:"30"}}, viewrecords : true, recordtext:"显示第 {0} 至 {1} 项结果,共{2}条结果", emptyrecords:"未查询到任何记录", rowNum:10, rowList:[10,20,30], pager : "#grid-pager", pgtext:"{0}", altRows: true, auto true, //shrinkToFit:false, //加载完成后的修改 loadComplete : function() { var table = this; }, });