浏览 3634 次
锁定老帖子 主题:从服务器获取Chart的数据
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-11
最后修改:2010-04-05
客户端html代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>chart demo</title> <link rel="stylesheet" type="text/css" href="../ext/resources/css/ext-all.css" /> <script type="text/javascript" src="../ext/adapter/ext/ext-base-debug.js"></script> <script type="text/javascript" src="../ext/ext-all-debug.js"></script> <script type="text/javascript" src="chart.js"></script> </head> <body> <div id="line-chart"></div> <div id="pie-chart"></div> </body> </html> 客户端chart.js代码如下: Ext.chart.Chart.CHART_URL = '../ext/resources/charts.swf'; Ext.onReady(function() { var lineStore = new Ext.data.JsonStore({ autoDestroy : true, url : '/extapp/ChartServlet', baseParams : { 'type' : 'line' }, root : 'data', fields : ['name', 'visits', 'views'] }); lineStore.load(); // extra extra simple new Ext.Panel({ title : '线图', renderTo : 'line-chart', width : 300, height : 200, layout : 'fit', items : { xtype : 'linechart', store : lineStore, xField : 'name', yField : 'visits', listeners : { itemclick : function(o) { var rec = lineStore.getAt(o.index); Ext.Msg.alert('Item Selected', 'You chose ' + rec.get('name')); } } } }); var pieStore = new Ext.data.JsonStore({ autoDestroy : true, url : '/extapp/ChartServlet', baseParams : { 'type' : 'pie' }, root : 'data', fields : ['season', 'total'] }); pieStore.load(); // extra extra simple new Ext.Panel({ title : '饼图', renderTo : 'pie-chart', width : 300, height : 300, layout : 'fit', items : { xtype : 'piechart', store : pieStore, dataField : 'total', categoryField : 'season', extraStyle : { legend : { display : 'bottom', padding : 5, font : { family : 'Tahoma', size : 13 } } }, listeners : { itemclick : function(o) { var rec = pieStore.getAt(o.index); Ext.Msg.alert('Item Selected', 'You chose ' + rec.get('season')); } } } }); }); 其中第一句Ext.chart.Chart.CHART_URL = '../ext/resources/charts.swf';是为了使用当前服务器的文件,如果没有这句话,默认会去adobe的站点取。 折线图和饼图的数据都是通过JsonStore取得的,可以通过url属性指定提供数据的地址,通过baseParam属性指定参数,其实这两个就是向服务器发送POST命令的url地址和参数。 折线图和饼图都是通过Panel的items属性定义的。折线图的xtype是linechart,x轴和y轴通过xField,和yField定义。饼图的xtype是piechart,分类通过categoryField定义,数据通过dataField定义。两者都可以通过listeners定义事件响应函数,这里分别定义了鼠标点击事件。 以下是服务器端的servlet的代码片段: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost"); String type = request.getParameter("type"); System.out.println("type = " + type); PrintWriter out = response.getWriter(); if (type.equals("line")) { out.print(lineChartData()); } else if (type.equals("pie")) { out.print(pieChartData()); } } private String lineChartData() { StringBuilder sb = new StringBuilder(); sb.append("{"); sb.append(" data : [{"); sb.append(" name : 'Jul 07',visits : 245000,views : 3000000"); sb.append(" },{"); sb.append(" name : 'Aug 07',visits : 205000,views : 3000000"); sb.append(" },{"); sb.append(" name : 'Sep 07',visits : 115000,views : 3000000"); sb.append(" },{"); sb.append(" name : 'Oct 07',visits : 255000,views : 3000000"); sb.append(" },{"); sb.append(" name : 'Nov 07',visits : 345000,views : 3000000"); sb.append(" },{"); sb.append(" name : 'Dec 07',visits : 315000,views : 3000000"); sb.append(" }]"); sb.append("}"); return sb.toString(); } private String pieChartData() { StringBuilder sb = new StringBuilder(); sb.append("{"); sb.append(" data : [{"); sb.append(" season: 'Summer',total: 150"); sb.append(" },{"); sb.append(" season: 'Fall',total: 245"); sb.append(" },{"); sb.append(" season: 'Winter',total: 117"); sb.append(" },{"); sb.append(" season: 'Spring',total: 184"); sb.append(" }]"); sb.append("}"); return sb.toString(); } 服务器端比较简单,根据参数分别返回折线图和饼图的数据。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |