Echarts后台option对象

最近在工作中使用到了Echarts来制作图表,在网上搜了好多例子几乎都是千篇一律的在前台写死一些js,然后把变量通过ajax或者遍历集合的方式插进去,这样子一旦某一页面的图表一多,就会异常混乱,偶然在开源中国看到有人做成了个Echarts对象的jar包,在后台进行完美封装传回一个option在前台接收了并set进option即可。试了试,效果非常好。
下面给出例子代码:

该方法返回的keyword指向了前台负责图表显示的jsp页面

[html] view plain copy

 print?

  1. public String keyword() {  
  2.        if(this.dateNum == null || this.dateNum.equals("")) {  
  3.            this.dateNum = "5" ;  
  4.        }  
  5.        return "keyword" ;   
  6.    }  

该方法根据jsp的ajax传回来显示的条数dateNum进行数据库取值(这地方我没有使用实时拿值,而是通过定时来把数据更新进一张表,从而图表拿值会非常迅速)

可以看出我定义了一个Option对象,里面的参数都可以在里面以方法或者属性的方式调用。最后封装好Option后,把他放入jsonObject对象传回前台一接收json值即可。

[html] view plain copy

 print?

  1. public String getKeyWordData() throws ParseException{  
  2.        LoginUser user = (LoginUser) ((SecurityContext) ServletActionContext  
  3.                 .getRequest().getSession()  
  4.                 .getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication()  
  5.                 .getPrincipal();  
  6.        Long id = user.getId() ;  
  7.        int num = Integer.parseInt(this.dateNum) ;  
  8.        jsonObj = new JSONObject() ;  
  9.        //取到该用户的所有关键字放入legendName数组  
  10.        List<String> names = this.cacheCountManager.getKeywordNames(id) ;  
  11.        String[] legendName = new String[names.size()] ;  
  12.        for(int i=0;i<names.size();i++) {  
  13.            String name = names.get(i) ;  
  14.            legendName[i] = name ;  
  15.        }  
  16.        String[] riqiArr = new String[num] ;  
  17.        for(int j=num;j>0;j--) {  
  18.            String riqi = getStrDate(String.valueOf(j)) ;  
  19.            riqiArr[num-j] = riqi ;  
  20.        }  
  21.        Option option=new GsonOption();  
  22.        option.title().text("关键词文章统计");  
  23.        option.tooltip().trigger(Trigger.axis);  
  24.        option.legend().data(legendName);  
  25.        ValueAxis axis = new ValueAxis();  
  26.        axis.type(AxisType.category).boundaryGap(false).data(riqiArr);  
  27.        option.xAxis(axis);  
  28.        CategoryAxis yaxis = new CategoryAxis();  
  29.        yaxis.type(AxisType.value);  
  30.        option.yAxis(yaxis);  
  31.        List<Series> seriess = new ArrayList<Series>() ;  
  32.        MarkPoint mp = new MarkPoint() ;  
  33.        mp.data(new Data().type(MarkType.max).name("最大值"),  
  34.                new Data().type(MarkType.min).name("最小值")) ;  
  35.        for(int i=0;i<names.size();i++) {  
  36.            Integer[] countArr = new Integer[num] ;  
  37.            Line line = new Line() ;  
  38.            String name = names.get(i) ;  
  39.            for(int j=num;j>0;j--) {  
  40.                String riqi = getStrDate(String.valueOf(j)) ;  
  41.                countArr[num-j] = this.cacheCountManager.getCount(id, riqi, name) ;  
  42.            }  
  43.            line.name(name).type(SeriesType.line).data(countArr).markPoint(mp) ;  
  44.            seriess.add(line) ;  
  45.        }  
  46.        option.series(seriess);  
  47.        jsonObj=JSONObject.fromObject(option.toString());  
  48.        return "echartsJson";  
  49.    }  

页面显示部分很简洁。

[html] view plain copy

 print?

  1. <div id="main"  style="height: 400px; border: 1px solid #ccc; padding: 10px;">图形正在加载中...</div>  

[html] view plain copy

 print?

  1. $(function(){  
  2.     require([ 'echarts','echarts/chart/line' ],DrawEChart);  
  3. });  

[html] view plain copy

 print?

  1. function DrawEChart(ec) {  
  2.     var myChart;  
  3.     myChart = ec.init(document.getElementById('main'));  
  4.     myChart.showLoading({  
  5.     text: "图表数据正在努力加载...",  
  6.     });  
  7.     var date = $("#dateNum").val() ;  
  8.     $.ajax({  
  9.     type : "post",  
  10.     data:{"dateNum":date},  
  11.         url : "${ctx}/statistics/statistics!getKeyWordData.action",  
  12.         dataType : "json",  
  13.         success : function(data) {  
  14.             myChart.setOption(data.jsonObj);  
  15.         myChart.hideLoading();  
  16.         },  
  17.         error : function(errorMsg) {  
  18.         alert("不好意思大爷,图表请求数据失败啦!");  
  19.         }  
  20.     });  
  21. }  

jar包下载:http://mvnrepository.com/artifact/com.github.abel533/ECharts

时间: 2024-10-27 20:42:09

Echarts后台option对象的相关文章

js select option对象小结

 本篇文章主要是对js中的select option对象进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 一基础理解:    var e = document.getElementById("selectId");    e. options= new Option("文本","值") ;    //创建一个option对象,即在<select>标签中创建一个或多个<option value="值"

js select option对象小结_javascript技巧

一基础理解: var e = document.getElementById("selectId"); e. options= new Option("文本","值") ; //创建一个option对象,即在<select>标签中创建一个或多个<option value="值">文本</option> //options是个数组,里面可以存放多个<option value="

JS动态添加与删除select中的Option对象

 本篇文章主要介绍了JS动态添加与删除select中的Option对象(示例代码) 需要的朋友可以过来参考下,希望对大家有所帮助 如下所示: 代码如下: //动态删除select中的所有options:    function delAllOptions(){         document.getElementById("user_dm").options.length=0;    }     //动态删除select中的某一项option:     function delOne

java后台缓存对象的问题

问题描述 java后台缓存对象的问题 现在有这样一个场景,业务层调用远程webservice获取的结果传输到前台但只需要显示几个关键字段,待用户查询完毕后点击提交这些结果全部数据都要保存,在后台如何缓存这个查询结果?有用过在业务层增加一个属性来保存这个查询结果但是感觉不是太好,大家一般是怎么做的讨论一下,小弟在这里先谢谢啦. 解决方案 用Ehcache啊,查询完了放进Ehcache. 需要用了去Ehcache中去,类似于Map 解决方案二: 不需要缓存查询结果,只要有主键匹配上就可以了.

combo box-EasyUI combobox 向后台传递对象

问题描述 EasyUI combobox 向后台传递对象 User对象:{private int id private String nameRole role} Role对象:{private int idprivate String name} 前台EasyUI combobox 通过url:返回role对象的json(后台是list.add(new Role())),现在form表单有user的id.name,以及combobox选中的role对象,后台可以获取User的id.name但是

浅谈下拉菜单中的Option对象_javascript技巧

1.创建Option对象 1.1 var optionEle1 = document.createElement('option'); 1.2 var optionEle2 = new Option(text, value, defaultSelected, selected); 2.options属性 2.1 select.options返回select标签下面的Option对象的集合 3.清空下拉菜单 3.1 利用for循环删除,注意数组长度的动态变化 3.2 select.options.

JS动态添加与删除select中的Option对象(示例代码)_javascript技巧

如下所示: 复制代码 代码如下: //动态删除select中的所有options:   function delAllOptions(){        document.getElementById("user_dm").options.length=0;   }  //动态删除select中的某一项option:    function delOneOption(index){        document.getElementById("user_dm").

前台js对象在后台转化java对象的问题

 在开发项目中多次遇到前台js对象在后台转化java对象的问题,下面就为大家介绍下前台js对象转后台java对象,感兴趣的朋友可以了解下 最近项目开发的过程中,多次遇到前台js对象在后台转化java对象的问题.记录下做法待用.    简单来说就是在前台用JSON.stringify()方法将js对象转化为js字符串,后台接收json字符串并将其转化为javaBean.    前台代码:  代码如下: var data = {};  data.id = $('#id').val();  data.

js ajax传递的对象中有数组后台怎么接收

问题描述 js ajax传递的对象中有数组后台怎么接收 {t1:'aa',t2:['a','b']} 我用jquery ajax向后台传对象,对象里面有数组,在后台怎么正确接收数组. 解决方案 spring mvc 接收ajax传递来的数组对象 解决方案二: 什么语言?找你使用的服务器端语言,一般都有对应的json反序列化对象,如asp.net的json.net {}对应类,[]对应数组 解决方案三: 接收整个json之后取出t2,然后强转为数组 解决方案四: 得看用什么方式把字符串转为对象.g