热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EXTJava后台获取数据生成饼状图

Ext做成各种图形是一个很好使的工具,以前没有接触过,现在因为工作,需要用他来做各种图。看过官方的demo和网上各位达人提供的例子,数据来源都是固定数据,

 

         Ext 做成各种图形是一个很好使的工具,以前没有接触过,现在因为工作,需要用他来做各种图。看过官方的demo和网上各位达人提供的例子,数据来源都是固定数据,

现在根据我的经验来分享下我从后台获取数据的经验:

 

        web前端:jsp

        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
        <%@ page language="java" cOntentType="text/html; charset=UTF-8"
                             pageEncoding="UTF-8"%>

       <%
                 String path = this.getServletContext().getContextPath();
                String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
       %>
     
     
     
      
                  /jsframe/ext-4.2.1.883/resources/css/ext-all.css" />
                  
                  
                  
      /css/common/jquery-ui-1.8.21.custom.css"
                  type="text/css" rel="stylesheet" />

    

    

                

   

 

     web前端:js

    

    
Ext.onReady(function () {
 //让Extjs 的Chart.save 切换到新的服务器
 Ext.draw.engine.ImageExporter.defaultUrl = 'ImageExportService';
 
 var orgName='';
 var commDataStore = new Ext.data.Store({
   autoLoad:true,
   proxy : new Ext.data.HttpProxy({
   url: path + '/popuStatAction!popuInfoFromCommuList.action?ac='+ Math.random(),
   method : 'GET',
   reader: new Ext.data.JsonReader({
             root: 'message'
         })
   }),
  
        fields: [
                 {name:'count',type:'int'},
                 {name:'orgCode',type:'string'},
                 {name:'orgName',type:'string'}
                ]
 });
 
 
 var chart = new Ext.chart.Chart({ 
  xtype: 'chart',
  width: 700,    
  height: 600,    
  store: commDataStore, 
  animate: true, 
  shadow: false,//一定会关闭阴影,否则拼饼突出的时候很不好看。
  legend: {
            position: 'right'
        },
  series: [{        
   type: 'pie',        
   field: 'count',
   showInLegend: true,//显示名称列表
   donut: false,//圆中空圈显示(如果显示给出数字)
   tips: {
                trackMouse: true,
                width: 140,
                height: 28,
                renderer: function(storeItem, item) {
                  //calculate percentage.
                  var total = 0;
                  commDataStore.each(function(rec) {
                      total += rec.get('count');
                  });
                  this.setTitle(storeItem.get('orgName') + ': ' + Math.round(storeItem.get('count') / total * 100) + '%');
                }
              },
              listeners: { 
               itemclick: function(o) { 
                var rec = commDataStore.getAt(o.index);
                var orgCode = rec.get('orgCode');
                orgName = rec.get('orgName');
                
                //peopleKindStore.proxy.url  =  path + '/popuStatAction!popuInfoFromTypeList.action?orgCode='+orgCode+'&ac='+ Math.random();
                //peopleKindStore.load();
               } 
            },
   label: {//这里能够使拼饼上面显示,该拼饼属于的部分            
    field: 'orgName',            
    display: 'rotate',
    contrast: true,          
    font: '18px Arial'       
    },        
   highlight: {//这里是突出效果的声明,margin越大,鼠标悬停在拼饼上面,拼饼突出得越多            
    segment: {                
     margin: 20           
     }        
    }       
    
   }]
 });
 
 var panel1 = Ext.create('widget.panel', {
        width: 700,
        height: 600,
        title: '饼状图',
        renderTo: 'container',
        layout: 'fit',
        tbar: [{
            text: '保存为图片',
            handler: function() {
                Ext.MessageBox.confirm('确定下载', '是否保存为图片?', function(choice){
                    if(choice == 'yes'){
                        chart.save({
                            type: 'image/png'
                        });
                    }
                });
            }
        }
//       , {
//            text: '刷新',
//            handler: function() {
//                // Add a short delay to prevent fast sequential clicks
//                window.loadTask.delay(100, function() {
//                    store1.loadData(generateData(6, 20));
//                });
//            }
//        }
        , {
            enableToggle: true,
            pressed: false,
            text: '圆环图',
            toggleHandler: function(btn, pressed) {
                chart.series.first().dOnut= pressed ? 35 : false;
                chart.refresh();
            }
        }],
        items: chart
    });
});

 

后台数据获取:

public void popuInfoFromCommuList(){
  String commPeopleList = JsonUtil.toJson(getRequest().getSession().getAttribute("commPeopleList")).toString();
  outJSON(commPeopleList,true);
 }

 

 

/**
  * 输出json信息
  * @param message
  * @throws Exception
  */
 public void outJSON(String message,boolean flag)
 {
  HttpServletResponse respOnse=this.getResponse();
  response.setContentType("text/json;charset=UTF-8");
  PrintWriter out=null;
  try {
   out=response.getWriter();
   JSONObject json=new JSONObject();
   json.put("success", flag);
   json.put("message", message);
   out.write(json.toString());
   out.flush();
   
  } catch (Exception e) {
   e.printStackTrace();
  }
  finally
  {
   if(out!=null)
   {
    out.close();
   }
  }

 }

 

后台数据格式:

{
 "success":true,
 "message":[
    {"count":7115,"orgCode":"1001001","orgName":"社区A"},
    {"count":6712,"orgCode":"1001002","orgName":"社区B"}
   ]
}

 

最主要的是前端的store设置和后台的数据格式一致,那么饼图就出现了。

 

注意:EXT自带的有save方法,对于一般的数字,英文字符等save是没有问题的,但是对于中文就会出现乱码问题,就是很多的小方格,那么怎么解决呢。

 

收藏有以为达人的解决方法,已验证,很好使。


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
author-avatar
热门星座排行榜空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有