ExtJS3.0出来了,不出所料,添加了Chart图表功能,但我觉得它自带的四种类型图表实在不怎么样,不够美观。今天在网上找了一下合适的Chart,比较流行的有AMChart和ChartFusion等。于是使用ExtJS和AMChart做了一个简单的图表演示Demo,感觉还不错。
我下载的AMChart类型是amcolumn,即柱状图,大家可以根据需要在http://www.amcharts.com下载合适的图表类型。数据则是使用ASP.NET,不过由于AMChart不支持JSON,所以示例数据就是一个aspx页面response.write一堆XML数据。
其代码如下:
    无标题页
   
   
        
        
        
        
        
            Ext.onReady(function(){
                    var panel = new Ext.Window({
                        title: 'My Panel',
                        applyTo: 'flashcontent',
                        width:520,
                        height:380,
                        html: ''
                    });
                    var so = new SWFObject("amcolumn/amcolumn.swf", "amcolumn", "520", "380", "8", "#FFFFFF");
                    so.addVariable("path", "amcolumn/");
                    so.addVariable("settings_file", encodeURIComponent("amcolumn_settings.xml"));
                    so.addVariable("data_file",  escape("data.aspx"));
                    so.addVariable("preloader_color", "#999999");
                    so.write("chart");
                    panel.show();
            });
   
最后的效果:

还不错,打算把它写成一个扩展组件,免得将来使用时麻烦。

如果是jsp:

ext部分:
var menuPanel = {
            region : 'west',
            contentEl : 'menu',
            collapsible : true,
            split : true,
            xtype: 'treepanel',
            title : 'Navigation',
            autoScroll: true,
            width : 200,
            loader: new Ext.tree.TreeLoader(),
            root: new Ext.tree.AsyncTreeNode({
                expanded: true,
                children: [{
                    text: 'プロジェクト計画',
                    leaf: false,
                    expanded: true,
                    children: [{
                            text: 'プロジェクト一覧',
                            leaf: true
                        }, {
                            text: 'プロジェクトマスタメンテナンス',
                            leaf: true
                        }, {
                            text: '作業量配分',
                            leaf: true,
                            url: 'work'
                        }, {
                            text: 'プロジェクト工数明細照会',
                            leaf: true
                        }, {
                            text: 'マイルストーン一覧',
                            leaf: true
                        }, {
                            text: 'マイルストーン定義&実績',
                            leaf: true
                        }, {
                            text: '時間配分一覧',
                            leaf: true
                        }, {
                            text: '時間要員配分',
                            leaf: true
                        }, {
                            text: '作業要員配分一覧',
                            leaf: true
                        }, {
                            text: '要員リリース計画',
                            leaf: true,
                            url: 'gantt'
                    }]
                }, {
                    text: 'プロジェクト実績',
                    leaf: false,
                    expanded: true,
                    children: [{
                            text: 'スケジュール管理',
                            leaf: true
                        }, {
                            text: '進捗状況入力',
                            leaf: true
                        }, {
                            text: '進捗報告',
                            leaf: true
                    }]
                }, {
                    text: '品質管理',
                    leaf: false,
                    expanded: true,
                    children: [{
                            text: '品質目標&計画',
                            leaf: true
                        }, {
                            text: 'チケット一覧',
                            leaf: true
                        }, {
                            text: '新規チケット登録',
                            leaf: true
                        }, {
                            text: 'チケット管理',
                            leaf: true
                        }, {
                            text: '関連チェックリスト指定',
                            leaf: true
                        }, {
                            text: 'チェックリスト入力',
                            leaf: true
                        }, {
                            text: '品質報告',
                            leaf: true
                        }, {
                            text: '要員評価',
                            leaf: true
                    }]
                }]
            }),
            rootVisible: false,
            listeners: {
                click: function(n) {
                    if (n.attributes.leaf) {
// Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.url + '"');
                        if (n.attributes.url == 'gantt') {
                            Ext.get('content-iframe').dom.style.display = 'none';
                            chartsPanel.hide();
                            searchPanel.show();
                            ganttPanel.show();
                        } else if (n.attributes.url == 'work') {
                            searchForm.getForm().url = 'work.do';
                            ganttPanel.hide();
                            chartsPanel.show();
                            drawChart('');
                        } else {
                            searchPanel.hide();
                            ganttPanel.hide();
                            Ext.get('content-iframe').dom.src = n.attributes.url;
                            Ext.get('content-iframe').dom.style.display = '';
                        }
                    }
                }
            }
        };

var searchForm = new Ext.FormPanel( {
          renderTo : 'searchForm',
          labelAlign : 'top',
          method : "POST",
          url: 'gantt.do',
          frame : true,
          bodyStyle : 'padding:5px 5px 0',
          width : 600,
          items : [ {
                xtype :'textfield',
                fieldLabel :'プロジェクトID',
                id :'taskIDS',
                name :'taskIDS',
                anchor :'95%'
              }, {
                xtype :'textfield',
                fieldLabel :'プロジェクト名',
                id :'taskNameS',
                name :'taskNameS',
                anchor :'95%'
          } ],
          buttons : [ {
            text :'検索',
            handler : search
          } ]
        });
        function drawChart(data) {
          var so = new SWFObject("amcharts/amcolumn/amcolumn/amcolumn.swf", "amcolumn", "520", "400", "8", "#FFFFFF");
          so.addVariable("path", "amcharts/amcolumn/amcolumn/");
          so.addVariable("settings_file", encodeURIComponent("amcharts/amcolumn/amcolumn/amcolumn_settings.xml"));
          if (data=='') {
            so.addVariable("data_file", encodeURIComponent("amcharts/amcolumn/amcolumn/amcolumn_data.xml"));
          } else {
            so.addVariable("data_file", escape(data));
          }
          so.write("columnChart");
        }
        function search() {
            // if (!searchForm.isValid) {alert();}
            var taskID = searchForm.findById('taskIDS').getValue();
            var taskName = searchForm.findById('taskNameS').getValue();
// var startTime = searchForm.findById('startTimeS').getValue();
// var taskExplain = searchForm.findById('taskExplainS').getValue();
            var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
            myMask.show();
            searchForm.getForm().submit({
                clientValidation: true,
                nocache:true,
                params: {
                    taskID : taskID,
                    taskName : taskName
                },
                success: function(form, action) {
                  if (action.result.flag == 'gantt') {
                    drawGantt(action.result.msg);
                  } else if (action.result.flag == 'chart') {
                    drawChart('chartData.jsp');
                  }
                  myMask.hide();
                },
                failure: function(form, action) {
                    myMask.hide();Ext.Msg.alert('Failure', action.result.msg);
// switch (action.failureType) {
// case Ext.form.Action.CLIENT_INVALID:
// Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
// break;
// case Ext.form.Action.CONNECT_FAILURE:
// Ext.Msg.alert('Failure', 'Ajax communication failed');
// break;
// case Ext.form.Action.SERVER_INVALID:
// Ext.Msg.alert('Failure', action.result.msg);
// }
                }
            })
          }
WorkAction.java

public class WorkAction extends Action {
    private WorkService workService;
    public void setWorkService(WorkService workService) {
        this.workService = workService;
    }
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        GanttForm ganttForm = (GanttForm) form;
        String data = this.workService.getWork(ganttForm.getTaskID());
        request.setAttribute("successFlag", true);
        request.getSession().setAttribute("msg", data);
        request.setAttribute("flag", "chart");
        return mapping.findForward("success");
    }
}

success.jsp
{success : ${successFlag}, msg : '${msg}', flag : '${flag}'}

chartData.jsp
${msg}

amcharts动态生成数据相关推荐

  1. 动态生成数据后绑定事件

    HTML代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta chars ...

  2. 通过JS代码动态生成HTML表格(Table),Input框,Button按钮.并且通过Input框的值进行查询动态生成数据填写在指定的表格里

    本人公众号上线啦!!! 公众号与博客名一样:没有腹肌的程序猿 公众号文章类型:工作上所遇到的需求实现方案分享. 此外也会提供一些数据集供大家使用.(这个还在规划中,毕竟打工人时间挺紧的,哈哈哈哈) 到 ...

  3. js动态生成数据列表

    我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js ...

  4. bootstrap-select动态生成数据,设置默认选项(默认值)

    bootstrap-select设置选中的属性是selected="selected",只要找出哪一项要设置为默认选项,再设置其属性selected="selected& ...

  5. 东软软件动态生成对数据表更新操作的方法

    1 public string CreatUpdate() 2 { 3 4 StringPlus strclass = new StringPlus(); 5 StringPlus strclass1 ...

  6. vue动态生成表单元素

    前几天接了一个需求,需要动态生成一个表单数据,然后提交,提交完数据后.通过编辑按钮进入时,需要进行数据回填. 一.页面展示: I. 没生成表单前的状态 Vue-UEedit UEedit II. 单机 ...

  7. JS实现动态生成表格并提交表格数据向后端 表格中数据转为json

    原文地址 需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存. 首先动态生成表格. 1.首先我们需要导入JS库文件.jQuery 2.然后在页面d ...

  8. ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法

    如下所示: $(function(){ $.ajax({ url:"departmentAction_getAllDep.action", type:"post" ...

  9. 使用JS动态生成表格数据和分页显示

    根据录入的内容动态显示到页面,不需要通过数据库保存,这样子减轻服务器压力.同时如果数据过多,支持分页显示,这些数据到保存时可以一起提交到后台. 效果如下: js代码(要引入JQuery): <! ...

最新文章

  1. STL与泛型编程(1)---模板
  2. 常见宽带错误解决方法
  3. 24-Thief小偷-Crime犯罪
  4. swagger报错No handler found for GET /swagger-ui.html
  5. MATLAB-2:基础与提高
  6. 【C#】VS2017 winform 打包
  7. Canvas入门06-线段与像素边界
  8. 【转】如何用css限制文字长度,使溢出的内容用省略号…显示
  9. 华为海外女科学家为您揭秘:GaussDB(for MySQL)云栈垂直集成的力量有多大?
  10. mysql分组查询 having,MYSQL-分组查询-where和having的区别
  11. java word另存为_Java 网页html转为word并保存为doc文件
  12. php paypal ipn,PHP 开发详解:PayPal Instant Payment Notification (IPN)
  13. VR家庭火灾安全系统_VR校园火灾安全系统_VR工厂火灾安全系统_VR宿舍火灾安全系统多场景选择
  14. 国务院关于积极推进“互联网+”行动的指导意见
  15. 将计算机设置成交换机主机,如何将路由器变成交换机功能 路由器变成交换机运用方式介绍【详解】...
  16. ubuntu20.04.5 安装过程中黑屏以及nvidia显卡驱动安装后,开机黑屏/无法启动,亮度过高无法调节等问题,以及没有rtl 8852be网卡驱动问题解决。Redmi G 2022
  17. leaflet 渲染geoJSON数据
  18. android PowerManager goToSleep 等用法
  19. Go面向对象编程的三大特性
  20. Mr.Xiong使用jQuery从控制器获取数据

热门文章

  1. 【系统集成】网络系统集成作业局域网路由器的配置
  2. 微信app清空群聊天消息的方法
  3. mysql和postsql分页数据的区别
  4. 最佳实践 | 助您提升应用的无障碍功能
  5. C++操作windows剪贴板数据(含文件复制)
  6. 买过的最离谱的东西---笑喷
  7. 登入验证安全 上(验证码、忘记密码、客户端验证)
  8. Markdown编辑器 vs.富文本编辑器:介绍/优缺点 (未完更新中)
  9. 51单片机学习笔记——蜂鸣器
  10. 论MathType中空格的正确的输入方法