我用的是struts2.1.8的struts2-json-plugin-2.1.8.1.jar插件 还有json-lib-2.4-jdk15.jar
java代码就是提供set和get方法
- Java code
int count = fieldManageService.getFieldmanageCount(name);List<Fieldmanage> list = fieldManageService.getFieldmanageList(name, start, limitNo);JSONArray array = JSONArray.fromObject(list);System.out.println(array.toString()+"dsds111sdsd");this.setData(array.toString());this.setTotalCount(count);
xml配置
- XML code
<action name="fieldManage_*" method="{1}" class="fieldManageAction"> <interceptor-ref name="json"></interceptor-ref> <result type="json"> <param name="includeProperties">totalCount,data</param> </result> </action>
前台的Ext
- JScript code
this.vstore = new Ext.data.JsonStore({ url:this.listUrl, totalProperty : 'totalCount', root : 'data', fields:this.fields, })this.grid = new Ext.grid.GridPanel({ store:this.vstore, loadMask: {msg:'正在加载数据,请稍侯……'}, tbar:[ { text:"添加", iconCls:"addIcon", handler:this.addActivity, scope:this }, "-", { text:"修改", iconCls:"editIcon", handler:this.editActivity, scope:this }, "-", { text:"删除", iconCls:"deleteIcon", handler:this.delActivity, scope:this } ], frame:true, columns:this.getColumns(), bbar:this.pagingToolbar })
前台FF检测到的json是[{"fieldManageDesc":"海都餐厅门口","fieldManageId":1,"fieldManageName":"餐厅门口","isuse":"1"}]是对的、但是Ext解析的时候应该是一条、但是他把这个串拆分开了、拆成85条了,例如第一条就是一个“[”,第二个就是“{”,一次类推、我很纳闷了。。
------解决方案--------------------
仍然用这个配置
<action name="fieldManage_*" method="doSomeThing" class="fieldManageAction">
<interceptor-ref name="json"></interceptor-ref>
<result type="json">
//后边这个配置不要了,默认把类成员全转成json对象
//<param name="includeProperties">totalCount,data</param>
</result>
</action>
方法名改成了 doSomeThing ,以此为例
//类名不变
public class fieldManageAction
{
//定义类成员,需要有get和set方法。 有get方法的就会自动转换到返回的json对象里
//除非在参数里用 excludeProperties 排除或是在类里用@JSON(serialize=false) 排除
//如果是Spring 自动注入的,一定不要给get方法或是一定要把它排除
private int totalCount; //整型
private Date today; //日期
private String memo; //字符串
private List<Fieldmanage> list; //对象 也是自动转换
//以上都给 get 和 set 方法
//这是ACTION 方法,方法里只需要对要返回的类成员赋值就行了
public String doSomeThing()
{
//……………………调用逻辑层方法处理逻辑
doBusinessThing();
// 赋值
totalCount=10; //赋值这里都随便取值了