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;
},
});