• 基于ssh框架的highcharts前后台数据交互实例


      Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

      官网:http://www.highcharts.com/,官网上的数据都是写死的,作为一名菜鸟,搞了很久才知道怎么传递,现特地写出来,希望能对大家有帮助。

     

      作为一名初入java web后台开发的菜鸟,在使用时highcharts时不知道前后台数据是怎么交互的,经过一番折腾,终于搞出一套方案,将后台传递数据传到前台。(可能我还是菜鸟,错误之处,大家自行甄别,以下我提到的只是我理解的,切忌不可当真)

      传递流程如下:首先,在前台jsp界面上会发送一个action1的form表单请求,会把一些数据传到后台进行处理(相对的action1),此时,action1返回的是success转到1.jsp界面。在1.jsp界面中,将action1函数中的一些数据hide在1.jsp中。当转入1.jsp时,会加载ajax,ajax又转到一个action url,这个url会带着hide在1.jsp中数据,转入另一个action:action2.action返回的是json数据,这时,再会把json做一定处理传到highcharts。

     1.form表单

    <s:form action="action1" namespace="/" >
    //一些其他的要传入到后台的表单数据  </s:form>

    2.action1

    public class actionAction extends BaseAction {
      public String action1() {
        //将前台的表单数据进行一些处理
        Map xAxisMap = new HashMap();
        Map yAxisMap = new HashMap();
        //传值到xAxisMap,yAxisMap,hide在1.jsp的界面中
        return success;
      }
    }
    
    <action name="action1" class="actionAction" method="action1">
      <result>/1.jsp</result>
    </action>

    3.前台1.jsp相关设置

    <s:hidden id="xAxisMap" name="xAxisMap" value="%{xAxisMap}"/><!-- highcharts图表的x轴数据 -->
    <s:hidden id="yAxisMap" name="yAxisMap" value="%{yAxisMap}"/><!-- highcharts图表的y轴数据 -->
    
    $(function(){  
                $.ajax({  
                   type: 'POST',  
                   dataType: 'JSON',
                   url: nameSpace+"/statisticLog.action?xAxisMap="+$("#xAxisMap").val()+"&yAxisMap="+$("#yAxisMap").val(),  
                       success : function(result){
                            解析result数据,形成highcharts图表
                       }    
                }); 
            });    
        );

    4.action2处理xAxisMap,yAxisMap数据,转成json格式,也方便,在js文件中的ajax里面调用传入highcharts插件中。

    public String action2() {
        //处理xAxisMap,yAxisMap并赋到jsonMap中
        jsonMap
        return success;
    }
    
    <action name="action2" class="actionAction" method="action2">
        <result type="json"><param name="root">jsonMap</param></result>
        <result name="input" type="json"><param name="root">jsonMap</param></result>        
    </action>

      action2返回的是json数据,在ajax中的success function(result){}中的result就是那个json型数据jsonMap。

      在加载1jsp,ajax会同步加载,调用aciton2,解析返回的jsonMap,highcharts也会显示出来。

    附:highcharts的使用设置

      highcharts初始化设置方法,一个为饼状图,一个为折线图。highcharts很重要的一部分就是数据格式的处理。

    function showLine(lineChart) {
        data0=lineChart[0];
        data1=lineChart[1];
        data2=lineChart[2];
        data3=lineChart[3];
        data4=lineChart[4];
        data5=lineChart[5];
        data6=lineChart[6];
        data7=lineChart[7];
        data8=lineChart[8];
        
        var chart = new Highcharts.Chart({  
                chart: {  
                    renderTo: 'chart',  
                    defaultSeriesType: 'line',  
                    marginRight: 130,  
                    marginBottom: 25  
                },  
                title: {  
                    text: 'smdb访问量统计',  
                    x: -20 //center  
                },  
                subtitle: {  
                    text: '各模块访问量折线图',  
                    x: -20  
                },  
                xAxis: {  
                    categories: data8  
                },  
                yAxis: {  
                    title: {  
                        text: '访问次数'  
                    },  
                    plotLines: [{  
                        value: 0,  
                         1,  
                        color: '#808080'  
                    }]  
                },  
                tooltip: {  
                    formatter: function() {  
                            return '<b>'+ this.series.name +'</b><br/>'+  
                            this.x +': '+ this.y +'';  
                    }  
                },  
                legend: {  
                    layout: 'vertical',  
                    align: 'right',  
                    verticalAlign: 'top',  
                    x: -10,  
                    y: 200,  
                    borderWidth: 0  
                },  
                plotOptions: {
                    line: {
                        dataLabels: {
                            enabled: true
                        },
                        enableMouseTracking: false
                    }
                },
                series: [{  
                    name: 'serverCount',  
                    data: data0 
                }, {  
                    name: 'systemCount',  
                    data: data1  
                }, {  
                    name: 'securityCount',  
                    data: data2 
                }, {  
                    name: 'personCount',  
                    data: data3
                }, {  
                    name: 'unitCount',  
                    data: data4
                }, {  
                    name: 'projectCount',  
                    data: data5
                }, {  
                    name: 'productCount',  
                    data: data6
                }, {  
                    name: 'awardCount',  
                    data: data7
                }]  
            });
    } 
      
     
    function showPie(arr) {  
        var data1=arr[0];
        var data2=arr[1];
        var data3=arr[2];
        var data4=arr[3];
        var data5=arr[4];
        var data6=arr[5];
        var data7=arr[6];
        var chart = new Highcharts.Chart({  
            chart: {  
              renderTo: 'chart',  
              plotBackgroundColor: null,  
              plotBorderWidth: null,  
              plotShadow: false  
            },  
            title: {  
              text: 'smdb访问统计比例饼状图'  
            },  
            tooltip: {  
              formatter: function() {  
                return '<b>' + this.point.name + '</b>: ' + '总计'+this.y + '次';  
              }  
            },  
            plotOptions: {  
              pie: {  
                allowPointSelect: false,  
                cursor: 'pointer',  
                dataLabels: {  
                  enabled: true,  
                  color: '#000000',  
                  connectorColor: '#000000',  
                  formatter: function() {  
                        return '<b>' + this.point.name + '</b>: ' + '总计'+this.y + '次';  
                  }  
                }  
              }  
            },  
            series: [  
              {  
                type: 'pie',  
                name: 'Browser share',  
                data:  [['systemCount',data1],
                        ['securityCount',data2],
                        ['personCount',data3],
                        ['unitCount',data4],
                        ['projectCount',data5],
                        ['productCount',data6],
                        ['awardCount',data7],
                          ]
              }  
            ]  
          });  
        }  
    
    $(function(){  
        $.ajax({  
           type: 'POST',  
           dataType: 'JSON',
           url: nameSpace+"/statisticLog.action?xMap="+$("#xMap").val()+"&yMap="+$("#yMap").val()+"&logTimeType="+$("#logTimeType").val(),  
               success : function(result){
                   if(JSON.parse(result).logTimeType==1){
                       var jjson=JSON.parse(result);
                       var pieChart = new Array();
                       pieChart[0]=jjson.systemCount;
                       pieChart[1]=jjson.securityCount;
                       pieChart[2]=jjson.personCount;
                       pieChart[3]=jjson.unitCount;
                       pieChart[4]=jjson.projectCount;
                       pieChart[5]=jjson.productCount;
                       pieChart[6]=jjson.awardCount;
               //systemCount等等各个count个表示一块扇形,这个数据不一定是显示百分比,也可以是值 showPie(pieChart); }
    else{if(JSON.parse(result).logTimeType==2|JSON.parse(result).logTimeType==3|JSON.parse(result).logTimeType==4|JSON.parse(result).logTimeType==5){ var lineChart = new Array(); lineChart[0] = JSON.parse(result).serverCount; lineChart[1] = JSON.parse(result).systemCount; lineChart[2] = JSON.parse(result).securityCount; lineChart[3] = JSON.parse(result).personCount; lineChart[4] = JSON.parse(result).unitCount; lineChart[5] = JSON.parse(result).projectCount; lineChart[6] = JSON.parse(result).productCount; lineChart[7] = JSON.parse(result).awardCount; lineChart[8] = JSON.parse(result).listXData; //serverCount等等count各用一条折线表示
                       //listXData为x轴上坐标一次显示的名称,比如一周,就一次显示星期一到星期五
      showLine(lineChart); } } } }); });

      图示如下:

      饼状图:  

      折线图:

      希望能通俗易懂。

  • 相关阅读:
    .cu文件属性中没有“CUDA C/C++”的原因
    QT QGraphicsView 在鼠标点击处进行放大缩小
    VS2017+Qt使用QChartsView过程中遇到的问题
    QString与char*的相互转换
    QT -- 对话框获取文件夹下所选图像名称
    Qt -- 获取文件夹中的文件/文件夹名字
    C/C++取数据中高8位,低8位,合成新数据
    C/C++中的位运算
    求解逆矩阵的常用三种方法
    Javascript定义类(class)的三种方法
  • 原文地址:https://www.cnblogs.com/byonecry/p/3598960.html
Copyright © 2020-2023  润新知