码迷,mamicode.com
首页 > Web开发 > 详细

HighCharts绘制JS折线图(后台传数据给前台基于JFinal框架)

时间:2015-11-21 21:08:18      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:

/*****************************Controller(基于JFinal框架)**************/

package com.zzu.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import com.google.gson.Gson;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Page;
import com.zzu.model.Parameter;
import com.zzu.model.Record;
import com.zzu.model.Record_V;
import com.zzu.model.recordinfo;

import com.zzu.util.GeneralService;
import com.zzu.service.RecordService;

    /*JS折线图方法(从后台动态传值给前台,并用这些值画折线图,实现鼠标靠近折线图上任意节点,显示该节点温度,浓度等信息)*/
    public void getProjectChart(){
         int port_id=1;
         String starttime=getPara("starttime").replace("/_/g","-");
         starttime=GeneralService.charReplace(starttime,"_","-");
         String endtime=getPara("endtime").replace("/_/g","-");
         endtime=GeneralService.charReplace(endtime,"_","-");
         int parameter_id=getParaToInt("parameter_id");
         System.out.print("parameter_id="+parameter_id);
        List<Record> records=new ArrayList<Record>();
        records=recordService.recordList(parameter_id,port_id,starttime,endtime);//获取某个时间段内某种参数对应的检测记录
        List<recordinfo> tm=new ArrayList<recordinfo>();
        for(int i=0;i<records.size();i++){
            recordinfo tm1=new recordinfo();
             Record r=records.get(i);
            tm1.setTemperature(r.getDouble("temperature"));
            tm1.setDensity(r.getDouble("density"));
            tm1.setSamping_time(formatter.format(r.getTimestamp("samping_time")));//将数据库中(bigint)samping_time以yyyy-MM-dd HH:mm:ss形式输出
            tm.add(tm1);
           }
        setAttr("tm",tm);//tm为对象数组,每个对象都有temperature和density属性
        ToGson(tm);//是为了向前台传链表List<Temperature> tm 键值对即:{temperature:值}
    
    }

public void ToGson(Object object) {
        //转换Gson格式
        Gson gson=new Gson();
        String str=gson.toJson(object);
        try {
            getResponse().getOutputStream().write(str.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

/*****************************html**************/

<script type="text/javascript">
       function doSubmit(){           //原来的折线图展示不出来原因是js里边变量和函数执行顺序没有搞正确。
                   
         var starttime=document.getElementById("starttime").value;
        
          var endtime=document.getElementById("endtime").value;
        
          var parameter_id=document.getElementById("parameter_id").value;
          var portId=document.getElementById("port_id").value;
          
          if(starttime==""){
                starttime="0000-00-00";
          }
          if(endtime==""){
                  endtime="9999-99-99";
          }
          
        // 此为正则表达式  /-/g 把所有的- 变成 _  也可以(‘-‘,‘_‘),但只替换第一个-
         starttime=starttime.replace(/-/g,‘_‘);
         endtime=endtime.replace(/-/g,‘_‘);

                       
                         
                           $.ajax({
                            
                             type:"post",
                             dataType:"json",
                             data: {"starttime":starttime,"endtime":endtime,"parameter_id":parameter_id,"port_id":portId},  //参数列表
                             async:false,
                             url:"/WaterSys/record/getProjectChart",
                            
                           success: function (data) {
                                    var Options = {

                                       chart: {

                                       renderTo: ‘chartPro‘,//将折线图放在id为chartPro的容器里边

                                       type: ‘line‘//设置图类型为折线型

                                          },

                                       title: {

                                       text: ‘水参数走势图‘,

                                       x: -20 //center

                                             },

                                        xAxis: {
                                        title: {

                                        text: ‘时间‘
                                           },
                                         },

                                         yAxis: {

                                         title: {

                                         text: ‘数值‘
     
                                            },
                                         min: 0,
                                         plotLines: [{
                                         value: 0,
                                         width: 1,
                                        color: ‘#808080‘
                                                     }]
                                                },
            
                                        credits: { enabled:false },//去掉水印
                                        exporting:{ enabled:false},//去掉导出按钮
                                        legend: {
                                        layout: ‘vertical‘,
                                        align: ‘right‘,
                                        verticalAlign: ‘middle‘,
                                        borderWidth: 0
                                                },
          
                                       series: [{
                                           name: ‘温度‘,
                                           color:‘green‘,
                                              },{
                                           name: ‘浓度‘,
                                           color:‘red‘,
                                               }]
                                             };
                                  
                                   tm_arr=[];//建立温度数组,接收从后台传来的温度值,并赋给Options.series[0].data即series的‘温度‘值
                                   dy_arr=[];//建立浓度数组,接收从后台传来的浓度值,并赋给Options.series[1].data即series的‘浓度‘值
                                   time_arr=[];//建立时间数组,接收从后台传来的时间值,并赋给Options.xAxis.categories即xAxis的‘时间‘值
                                   
                                   for (i in data) {

                                    var r = data[i];

                                    tm_arr.push(r.temperature);//
                                    dy_arr.push(r.density);//
                                   time_arr.push(r.samping_time);//
                                    }
                                    Options.series[0].data = tm_arr;
                                    Options.series[1].data = dy_arr;
                                    Options.xAxis.categories = time_arr;
                                    var chart = new Highcharts.Chart(Options);
                                    },
                                    cache: false
                                    });
 };        

</script>

<body onload="doSubmit()">
    <table>
                <tr>
                    <td>请选择参数名称</td>
                    <td>
                        <select name="parameter_id" id="parameter_id">
                            <#list pList as pl>
                             <option value ="${pl.parameter_id}">${pl.parameter_name}</option>
                            </#list>
                        </select>
                    </td>
                    <td>请选择时间范围:</td>
                    <td><input type="text" style="width:100px" id="starttime" name="starttime" class="date" /></td>
                    <td>——</td>
                    <td><input type="text" style="width:100px" id="endtime" name="endtime" class="date" /></td>
                    <td><input type="button" onclick="doSubmit()" value="确定" /></td>
                </tr>
    </table>
    <input type="hidden" id="port_id" value="${port_id}"/>
<div id="chartPro"  style=" width: 100%; height: 100%; "  ><br/><br/><br/><center><span class="img_loading" title="加载中"></span></center></div>
 </body> 

 

HighCharts绘制JS折线图(后台传数据给前台基于JFinal框架)

标签:

原文地址:http://www.cnblogs.com/zsy-2015-10-18/p/4984686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!