手头有一个需求,就是将一个Servlet的doGet方法返回的xml实时刷新显示到gridpanel上[初次接触extjs,有一定js基础]
servlet大致代码如下response.setCharacterEncoding("utf-8");
PrintWriter out = new PrintWriter(response.getOutputStream());
strXmls = "<dataset><id>1</id>....<terminal><code>156</code></terminal><terminal>....</terminal></dataset>";//定义不写了,怎么组织的也粗略写一下,没写xml格式的头
BufferedWriter bw = new BufferedWriter(out);
try
{
bw.write(strXmls);
bw.flush();
}
/*别的代码就不加了类似关闭什么的*/现在把客户端脚本关键部分传上来store = new Ext.data.Store({
//url: 'xml/comm_more.xml', //指定一个数据源url
//url: 'http://127.0.0.1:9090/Manager/test'
//url: 'http://127.0.0.1/xmlserver.asp',
//url: 'xmlserver.asp',
proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("数据加载!请检查");
}
}),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"]) //指定读用的工具
});
grid = new Ext.grid.GridPanel({
//frame:true,
stripeRows : true, //设置分隔符
animCollapse : true, //设置关闭面板时的动态效果
enableColumnMove : false, //关闭列拖动
enableColumnResize : false, //关闭列大笑
renderTo:Ext.getBody(),
//title:'',
cm: cm, //定义的一个Ext.grid.ColumnModel,不贴出来了
store: store,
viewConfig:{
forceFit: true
},
width: 800,
height: 300
//loadMask:true
});如上面代码所写,现在的store用的是一个proxy和一个reader,proxy用的是HttpProxy,传的是一个本地的asp文件 dim http, returnStr, URL
URL = "http://127.0.0.1:9090/Manager/test"
on error resume next
Set http=Server.CreateObject("Microsoft.XMLHTTP")
http.Open "GET",URL,False
http.send
returnStr=bytes2bstr(http.responsebody)
response.write returnStrasp里只是做了一个数据的缓冲(做这个的原因是我昨天晚上将HttpProxy的url指定为tomcat的servlet,gridpanel什么都不显示),于是我想是不是因为HttpProxy在读servlet的时候还读了一些http头,所以我就写了这么一个asp来将servlet的内容转成网页显示的内容)
结果还是一样不显示,不过如果将HttpProxy的url换成本地server上的一个xml文件,还是可以让gridpanel显示出来的,而且可以实时刷新
于是我想是不是httpproxy在读servlet或asp文件的时候出错了,我就在httpproxy下添加了success和failure的回调,如下proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("you did it");
}
})然而每次都是弹出"you did it",由此我认为可能是xmlreader在读数据的时候可能遇到非法数据了,于是我将数据请求放到了一个方法里由Ext.Ajax.request来执行 Ext.Ajax.request(
{
url: 'http://127.0.0.1:9090/Manager/test',
method: 'get',
success: onGetXmlSucc,
failure: onGetXmlFail
}
);
function onGetXmlSucc(request, options)
{
g_strXml = request.responseText;
if ( typeof(DOMParser) == "undefined" )
{
if (g_xmlDoc == null)
{
g_xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
g_xmlDoc.async = false;
}
g_xmlDoc.loadXML(g_strXml);
}
else
{
if ( g_xmlDoc == null)
{
if ( g_domParser == null)
{
g_domParser = new DOMParser();
}
}
g_xmlDoc = g_domParser.parseFromString(g_strXml, "application/xml");
}
}这样我启用一个timer就可以定时刷新g_xmlDoc
与此同时,我将store的定义修改为如下store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(g_xmlDoc),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"]) //指定读用的工具
});结果,依就没有显示,请各位Ext大牛们帮帮忙指导下,我的问题到底出在哪?
是我这几种尝试都不对?还是哪的代码写错了
servlet大致代码如下response.setCharacterEncoding("utf-8");
PrintWriter out = new PrintWriter(response.getOutputStream());
strXmls = "<dataset><id>1</id>....<terminal><code>156</code></terminal><terminal>....</terminal></dataset>";//定义不写了,怎么组织的也粗略写一下,没写xml格式的头
BufferedWriter bw = new BufferedWriter(out);
try
{
bw.write(strXmls);
bw.flush();
}
/*别的代码就不加了类似关闭什么的*/现在把客户端脚本关键部分传上来store = new Ext.data.Store({
//url: 'xml/comm_more.xml', //指定一个数据源url
//url: 'http://127.0.0.1:9090/Manager/test'
//url: 'http://127.0.0.1/xmlserver.asp',
//url: 'xmlserver.asp',
proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("数据加载!请检查");
}
}),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"]) //指定读用的工具
});
grid = new Ext.grid.GridPanel({
//frame:true,
stripeRows : true, //设置分隔符
animCollapse : true, //设置关闭面板时的动态效果
enableColumnMove : false, //关闭列拖动
enableColumnResize : false, //关闭列大笑
renderTo:Ext.getBody(),
//title:'',
cm: cm, //定义的一个Ext.grid.ColumnModel,不贴出来了
store: store,
viewConfig:{
forceFit: true
},
width: 800,
height: 300
//loadMask:true
});如上面代码所写,现在的store用的是一个proxy和一个reader,proxy用的是HttpProxy,传的是一个本地的asp文件 dim http, returnStr, URL
URL = "http://127.0.0.1:9090/Manager/test"
on error resume next
Set http=Server.CreateObject("Microsoft.XMLHTTP")
http.Open "GET",URL,False
http.send
returnStr=bytes2bstr(http.responsebody)
response.write returnStrasp里只是做了一个数据的缓冲(做这个的原因是我昨天晚上将HttpProxy的url指定为tomcat的servlet,gridpanel什么都不显示),于是我想是不是因为HttpProxy在读servlet的时候还读了一些http头,所以我就写了这么一个asp来将servlet的内容转成网页显示的内容)
结果还是一样不显示,不过如果将HttpProxy的url换成本地server上的一个xml文件,还是可以让gridpanel显示出来的,而且可以实时刷新
于是我想是不是httpproxy在读servlet或asp文件的时候出错了,我就在httpproxy下添加了success和failure的回调,如下proxy: new Ext.data.HttpProxy({
url: 'xmlserver.asp',
failure : function() {
Ext.MessageBox.alert("数据加载失败!请检查");
},
success: function()
{
//Ext.MessageBox.alert("you did it");
}
})然而每次都是弹出"you did it",由此我认为可能是xmlreader在读数据的时候可能遇到非法数据了,于是我将数据请求放到了一个方法里由Ext.Ajax.request来执行 Ext.Ajax.request(
{
url: 'http://127.0.0.1:9090/Manager/test',
method: 'get',
success: onGetXmlSucc,
failure: onGetXmlFail
}
);
function onGetXmlSucc(request, options)
{
g_strXml = request.responseText;
if ( typeof(DOMParser) == "undefined" )
{
if (g_xmlDoc == null)
{
g_xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
g_xmlDoc.async = false;
}
g_xmlDoc.loadXML(g_strXml);
}
else
{
if ( g_xmlDoc == null)
{
if ( g_domParser == null)
{
g_domParser = new DOMParser();
}
}
g_xmlDoc = g_domParser.parseFromString(g_strXml, "application/xml");
}
}这样我启用一个timer就可以定时刷新g_xmlDoc
与此同时,我将store的定义修改为如下store = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(g_xmlDoc),
reader: new Ext.data.XmlReader({
record: 'Terminal',
id: 'id',
totalRecords: 'totalRecords',
success: 'success'
}, /*字段数组*/["DateTime", "Code", "AutoRun", "CPUUtilityrate", "MemUtilityrate", "Started", "D-Free", "D-Total", "E-Free", "E-Total", "F-Free", "F-Total"]) //指定读用的工具
});结果,依就没有显示,请各位Ext大牛们帮帮忙指导下,我的问题到底出在哪?
是我这几种尝试都不对?还是哪的代码写错了
解决方案 »
- jquery 如何取自定义标签的值
- (工作遇到的一个难题,希望哪位高手帮我解决下)跳转到某个页面 让这个页面上树菜单的某个结点子松促发点击事件
- 高分求助,很长时间没有解决的div难题:
- js或jquery如何判断json中某个值出现的个数?
- Javascript高手在哪呢!!!
- Extjs4如何设置store加载请求方式为POST
- ff e.target取不到值
- 框架中,在左页面中,有没有办法得到右页面单击的那个链接
- (求救)知道表名如何差别表中"radio"按钮所择项???(以后补分)
- js 调用 iframe 中的 函数问题
- 请问我想遍历页面上所有的script对象怎么办呢?
- 请问html编辑器是怎么做的?
以前做VC的时候只要组织成相应的格式就可以给相应的库用,没想到这里居然要写明
将asp中加入<%response.ContentType="application/xml"%>在servlet中加入 response.setContentType("application/xml");在测试之前的几种尝试,全都好用了,
要分的,顶一下吧