struts2.3+extjs4.2,store中如果配置本地data,grid能正确显示;但如果配proxy(ajax)访问struts,json数据能返回(chrome控制台正确输出了),但grid就是不显示数据,如图。

----------------------------

发现一个问题:表格的行数恰好是返回json串的字符个数(图中没有截取完整),所有行都没有内容;如果吧store文件中的reader的type改为array,则每行能显示一个字符。
折腾了一晚上,能找到的所有方法都试过了。100分跪求高人解答,长期在线,文件都贴在下面了。
---------------------
下面是源代码
------------------------
view文件(ems.view.RoleManager):
Ext.define('ems.view.RoleManager',{
extend: 'Ext.grid.Panel',
title: '角色管理',
alias : 'widget.roleManager',
store: 'RoleStore',
columns: [
{text: 'id', dataIndex: 'id'},
{text: 'name', dataIndex: 'name'}
],
initComponent : function() {
this.callParent(arguments);
}
});
model文件(ems.model.Role):
Ext.define("ems.model.Role", {
extend: "Ext.data.Model",
fields: [
{name: 'id', type: 'string'},
{name: 'name', type: 'string'}
]
});
store文件(ems.store.RoleStore):
Ext.define('ems.store.RoleStore', {
extend: 'Ext.data.Store',
model: 'ems.model.Role',
storeId: 'role_store',
proxy: { // 用远程数据,grid就不能显示数据????
type: 'ajax',
url: 'role_list.do', // struts的action方法
reader: {
type: 'json',
root: 'myData'
}
},
// data:[ // 直接使用本地写死数据,grid可以正确显示这2条数据
// {id:'1',name:'222'},
// {id:'3',name:'ss'}
// ],
autoLoad: true
});
controller文件(ems.controller.RoleCtrl):
Ext.define('ems.controller.RoleCtrl', {
extend: 'Ext.app.Controller',
views:['RoleManager'],
models:['Role'],
stores:['RoleStore'],
init: function() {
this.control({
});
}
});
struts的action方法:
public String list() {
List<Role> list = roleBiz.findAllRoles();
// myData = JsonUtils.toJson(list, new String[]{"userRoles", "permissions"});
myData="[{\"id\":\"1\", \"name\":\"ddd\"}]";
success = true;
return SUCCESS;
}
入口app.js:
Ext.onReady(function() {
Ext.Loader.setConfig({ enabled: true, disableCaching: true });
Ext.application({
name : 'ems',
appFolder : 'app',
controllers:['RoleCtrl'],
launch : function() {
Ext.create('Ext.container.Viewport', {
layout : 'fit',
items: [ { // west
xtype: 'roleManager',
width: 140,
margins: '3 0 3 5',
id: 'west'
}]
});
}
});
});
-------------------------
不要说JSON格式不对什么的,就2个列,都是字符串,加单、双引号都试过了,就是不行。跟struts版本估计没关系,浏览器能输出json信息,会不会是extjs 4.2.1的bug?
跪求高人解答,100分奉送!
------解决方案--------------------
调整你服务端程序,是指输出形如这样的串
{"myData":[{"id":"1", "name":"ddd"}]
------解决方案--------------------
Java 难道没有从对象或数组构造出 json 的方法吗?
真太奇怪了
这一项碰到好几个这样的问题了
------解决方案--------------------
你的myData就是字符串,当然会自动加上双引号。。还是移动到java版块去吧你这个问题
------解决方案--------------------
action里myData不要自己手动改为String类型的json字符串,直接赋为json对象,struts返回json的时候,自己回序列化,所以你的代码是二次序列化的结果。
------解决方案--------------------