Highchart 动态从库中读取数据

前台页面jsp


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Highcharts Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="${ctx}/common/chartJs/highcharts.js"></script>
<script src="${ctx}/common/chartJs/modules/exporting.js"></script>
<script type="text/javascript">
    $(document).ready(function() {

    $.post("${ctx}/chart/updateChartAction2.do", function(json) {
        new Highcharts.Chart({
        chart : {
            //将图表显示至 container div
            renderTo : 'container',
            //char的类型 line, spline, area, areaspline, column, bar, pie and scatter
            type : 'line',
            //上边距
            marginRight : 130,
            //下边距
            marginBottom : 45,
            //不显示动画(性能)
            animation : false
        },

        //标题
        title : {
            text : 'Monthly Average Temperature',
            //The x position of the title relative to the alignment within chart.spacingLeft and chart.spacingRight. Defaults to 0.
            x : 0
        },

        //子标题
        subtitle : {
            text : 'Source: WorldClimate.com',
            x : 0
        },

        //x轴 标题
        xAxis : {
            //Can be one of "linear", "logarithmic", "datetime" or "category".
            type : 'category'
        },

        //y轴 标题
        yAxis : {
            title : {
            text : '测试数据(%)'
            },
            labels : {
            format : '{value} %'
            },
            //基准线
            plotLines : [ {
            //基准线类型 点线
            dashStyle: 'Dash',
            //The position of the line in axis units.
            value : 80,
            //The width or thickness of the plot line.
            width : 1,
            //y轴上的刻度线颜色
            color : '#EE0000'
            } ]
        },

        //当鼠标放在point上时,显示的单位/后缀
        tooltip : {
            //是否显示tip
            enabled: true,
            //是否可以比较
            shared: false,
            //可现实小数位数
            valueDecimals: 1,
            //前缀
            valuePrefix : '',
            //后缀
            valueSuffix : '%'
        },

        //绘图项设置
        plotOptions : {
            line : {
            //超过阀值的颜色
            color: '#FF0000',
            //未超过阀值后的颜色
               negativeColor: '#0088FF',
               //阀值
            threshold : 80,
            //线条  是否趋势成动画显示
            animation: {
                duration: 2000
            }
            }
        },

        //图例框
        legend : {
            enabled: true,
            //The layout of the legend items. Can be one of "horizontal" or "vertical".
            layout : 'vertical',
            //The horizontal alignment of the legend box within the chart area. Valid values are "left", "center" and "right"
            align : 'left',
            //The vertical alignment of the legend box. Can be one of "top", "middle" or "bottom". 
            //Vertical position can be further determined by the y option. Defaults to bottom.
            verticalAlign : 'top',
            //The x offset of the legend relative to it's horizontal alignment align within chart.
            x : 0,
            //The vertical offset of the legend relative to it's vertical alignment verticalAlign within chart.
            y : 100,
            //The width of the drawn border around the legend. Defaults to 1.
            borderWidth : 1
        },

        //去掉highChart网站连接url
        credits : {
            enable : true
        },

        //去掉导出按钮
        exporting : {
            enabled : true
        },

        //数据,个人认为这种方法,最强之处就在于series传值完全通过json。
        series : json
        });

    }, "json");

    });
</script>
</head>
<body>
<div id="container" style="min-width: 400px; height: 420px; margin: 0 auto"></div>
</body>
</html>

后台使用json传送数据。这里使用json的便利之处,就在数据的格式更佳灵活。开发人员能够更灵活的控制数据的传递。


/**
 * 方法二:组织成json传送到前台
 */
public void updateChartAction2(){
    List<Chart> c1 = chartService.getChartByName("beijing");
    List<Chart> c2 = chartService.getChartByName("shanghai");
    try {
        JSONObject obj1 = this.writeJSON("beijing", c1);
        JSONObject obj2 = this.writeJSON("shanghai", c2);

        /**
         *   组合成
         *  [
         *    name:xxx
         *    data: {[x1,y1],[x2,y2], ... }
         *   ]
         */
        JSONArray all = new JSONArray();
        all.put(obj1);
        all.put(obj2);

        HttpServletResponse response = ServletActionContext.getResponse();
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(all.toString());
        response.getWriter().flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public JSONObject writeJSON(String nameVlu, List<Chart> list) {
    // 组合成{[x1,y1],[x2,y2], ... }
    JSONArray jsonArray = new JSONArray();
    for (int i = 0; i < list.size(); i++) {
        JSONArray sub = new JSONArray();
        sub.put(list.get(i).getcTime());
        sub.put(list.get(i).getCdata());
        jsonArray.put(sub);
    }

    /**
     * 组合成 name:xxx data: {[x1,y1],[x2,y2], ... }
     */
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("name", nameVlu);
    jsonObject.put("data", jsonArray);

    return jsonObject;
}

你可能感兴趣的:(dynamic,database,highchart)