[color=red][size=large]现在要达到的一个目的是 显示一个信息页面A(grid),里面的数据信息是通过Action得到的数据集(ArrayList)[/size][/color]
我现在做个一个Action 可以得到一个ArrayList并 setAttrbute到request中。并且返回到了一个页面B中,B 将ArrayList转换成了JSON 数据格式并且 输入到 B的页面中。
我怎么能让A得到这些数据呢?
var store = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({
method:'get',
url : '../display.do'
//url : '/display.do' !NO!
//url : 'display.do' !NO!
//url : 'http://localhost:8080/Prj5_3/display.do'
})
这个里面的url可以让他做Action吗?
工程我打了个包 非常感谢你的指点~
[b]问题补充:[/b]
js代码如下:
[code="js"]
/**
* 生成列模型
*/
var cm = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), {
// 用户编号
header : '学号',
dataIndex : 'stuId',
sortable : true
}, {
// 用户真实姓名
header : '姓名',
dataIndex : 'stuName',
sortable : true
}, {
// 用户性别
header : '性别',
dataIndex : 'stuSex',
sortable : true
}, {
// 用户所在部门名称
header : '出生年月',
dataIndex : 'stuBir',
sortable : true
},{
// 操作列
header : '家庭住址',
dataIndex : 'stuAdd'
}]);
/**
* 声明数据适配器,将数据源与列模型绑定
*/
var store = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({
method:'get',
url : '../display.do'
//url : '/display.do' !NO!
//url : 'display.do' !NO!
//url : 'http://localhost:8080/Prj5_3/display.do'
}),
reader : new Ext.data.JsonReader({
totalProperty : 'totalProperty',
root : 'root'
}, [{
name : 'stuId',
mapping : 'stuId'
}, {
name : 'stuName',
mapping : 'stuName'
}, {
name : 'stuSex',
mapping : 'stuSex'
}, {
name : 'stuBir',
mapping : 'stuBir'
}, {
name : 'stuAdd',
mapping : 'stuAdd'
}])
});
/**
* 生成Bbar,用于分页显示
*/
var bbar = new Ext.PagingToolbar({
pageSize : 10,
store : store,
displayInfo : true,
displayMsg : '显示第{0}条到{1}条记录,一共{2}条',
emptyMsg : '没有记录'
});
/**
* 声明一个Grid,列表显示信息
*/
var grid = new Ext.grid.GridPanel({
el : 'UIgrid',
title : '用户信息',
height : 430,
trackMouseOver : false,
loadMask : {
msg : '正在加载数据,请稍后.....'
},
ds : store,
cm : cm,
sm : new Ext.grid.RowSelectionModel(),
bbar : bbar
});
// =================================渲染呈现========================================
/**
* 渲染呈现Grid,Store初始化
*/
grid.render();
store.load({
params : {
start : 0,
limit : 10
}
});
})
[/code]
我好像没有定义回调函数,怎么用的啊?我看那个龙门镖局的例子里面是这样的。所以我就照着写的
[b]问题补充:[/b]
忘记说了 我在显示页面A的时候并没有触发Action事件~~~~即根本没有做Servlet的doGet
[b]问题补充:[/b]
url : '/Prj5_3/display.do' 现在确实能调用Action了 但是前台页面读取不到返回的内容~~~~郁闷
有以下几个问题
没有触发Action的原因是因为你的请求路径写错了
[code="js"]
var store = new Ext.data.Store({
url : '/Prj5_3/display.do',//可以这样,或者url:'display.do',当你前面加了一个斜杠的时候就是直接引用到跟路径了,类似http://localhost:8080/display.do 这样你肯定就请求不到了.所以这里一定要注意
reader : new Ext.data.JsonReader({
totalProperty : 'totalProperty',
root : 'root'
}, [{
name : 'stuId',
mapping : 'stuId'
}, {
name : 'stuName',
mapping : 'stuName'
}, {
name : 'stuSex',
mapping : 'stuSex'
}, {
name : 'stuBir',
mapping : 'stuBir'
}, {
name : 'stuAdd',
mapping : 'stuAdd'
}])
});
[/code]
其次
[quote]return new ActionForward("/DB2JSON.jsp");[/quote]
你这里没有必要跳转到另外一个单独的jsp页面去处理json数据,你完全就可以再这个Action方法里面处理,最后Action返回空就可以了 return null;
如果你喜欢放到jsp页面去处理的话,Action最后的返回语句也不用
return new ActionForward("/DB2JSON.jsp"); 这样写,在Action方法里面已经给你传递过来一个ActionForward对象了.不比在新建一个对象
[code="java"]public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
//.....
return mapping.findForward("/Prj5_3/DB2JSON.jsp");//这样写就可以了,注意你这里路径又写错了.系统会找不到DB2JSON.jsp这个页面的.
}[/code]
另外你很多地方命名不规范,比如jsp页面的命名最好都小写,项目名称最好小写,例如(prj5_3/db2json.jsp) 这样是规范的写法
可以呀,url写一个action,然后让action来处理,处理完结果会回调你的js方法的
[code="java"]
GridPanelFil = function(conf){
var config = {
};
Ext.apply(config,conf);
GridPanelFil.superclass.constructor.call(this,config);
}
Ext.extend(GridPanelFil,Ext.grid.GridPanel,{
/**
* @public
* 请求数据 ../admin/filter!loadColumnsInfo.html
* @param {} url
* @param {} params
*/
loadData : function(url,params){
this.store.proxy= new Ext.data.HttpProxy({
url:url,
method:"POST"
});
this.store.baseParams=params;
this.store.load();
}
);
引入上面那个js文件后 ;
这么使用:
var config = {
grid的配置
}
var grid = new GridPanelFil(config);
grid.loadData("url",params);//请求后台数据
[/code]
上头那个 是封装好的
如果要做扩展 请自己加方法
你给的附件里面不包括后台的数据库,所以我也没有办法继续帮你测试下去!
至少能够访问到你的Action了.因为在Action里面是要查询数据到list里面.这个你附件中没有.如果你使用的是struts2,你可以使用json-plugin ,如果使用的是struts1你可以使用JsonArray这个第三方的包.若都不是,你可以自己来解析查询出来的数据.
正确的json字符串的格式应该为
"{'totalProperty':3,'root':[{key:value},{key:value},{key:value}]}"