• Echarts后台封装option对象


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

    public String keyword() {
    if(this.dateNum == null || this.dateNum.equals("")) {
    this.dateNum = "5" ;
    }
    return "keyword" ;
    }

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

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

    public String getKeyWordData() throws ParseException{
    LoginUser user = (LoginUser) ((SecurityContext) ServletActionContext
    .getRequest().getSession()
    .getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication()
    .getPrincipal();
    Long id = user.getId() ;
    int num = Integer.parseInt(this.dateNum) ;
    jsonObj = new JSONObject() ;
    //取到该用户的所有关键字放入legendName数组
    List<String> names = this.cacheCountManager.getKeywordNames(id) ;
    String[] legendName = new String[names.size()] ;
    for(int i=0;i<names.size();i++) {
    String name = names.get(i) ;
    legendName[i] = name ;
    }
    String[] riqiArr = new String[num] ;
    for(int j=num;j>0;j--) {
    String riqi = getStrDate(String.valueOf(j)) ;
    riqiArr[num-j] = riqi ;
    }
    Option option=new GsonOption();
    option.title().text("关键词文章统计");
    option.tooltip().trigger(Trigger.axis);
    option.legend().data(legendName);
    ValueAxis axis = new ValueAxis();
    axis.type(AxisType.category).boundaryGap(false).data(riqiArr);
    option.xAxis(axis);
    CategoryAxis yaxis = new CategoryAxis();
    yaxis.type(AxisType.value);
    option.yAxis(yaxis);
    List<Series> seriess = new ArrayList<Series>() ;
    MarkPoint mp = new MarkPoint() ;
    mp.data(new Data().type(MarkType.max).name("最大值"),
    new Data().type(MarkType.min).name("最小值")) ;
    for(int i=0;i<names.size();i++) {
    Integer[] countArr = new Integer[num] ;
    Line line = new Line() ;
    String name = names.get(i) ;
    for(int j=num;j>0;j--) {
    String riqi = getStrDate(String.valueOf(j)) ;
    countArr[num-j] = this.cacheCountManager.getCount(id, riqi, name) ;
    }
    line.name(name).type(SeriesType.line).data(countArr).markPoint(mp) ;
    seriess.add(line) ;
    }
    option.series(seriess);
    jsonObj=JSONObject.fromObject(option.toString());
    return "echartsJson";
    }

    页面显示部分很简洁。

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

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

     

    function DrawEChart(ec) {
    var myChart;
    myChart = ec.init(document.getElementById('main'));
    myChart.showLoading({
    text: "图表数据正在努力加载...",
    });
    var date = $("#dateNum").val() ;
    $.ajax({
    type : "post",
    data:{"dateNum":date},
    url : "${ctx}/statistics/statistics!getKeyWordData.action",
    dataType : "json",
    success : function(data) {
    myChart.setOption(data.jsonObj);
    myChart.hideLoading();
    },
    error : function(errorMsg) {
    alert("不好意思大爷,图表请求数据失败啦!");
    }
    });
    }

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

  • 相关阅读:
    CF891E Lust
    Comet OJ 2019 夏季欢乐赛题解
    CF1098E Fedya the Potter
    CF1063F String Journey
    P4218 [CTSC2010]珠宝商
    AGC028 E
    51Nod 1584 加权约数和
    51Nod 1769 Clarke and math2
    Educational Codeforces Round 67
    斯特林数学习笔记
  • 原文地址:https://www.cnblogs.com/guo-eric/p/7735220.html
Copyright © 2020-2023  润新知