Javascript 在谷歌图表中提供按钮和下拉列表

Javascript 在谷歌图表中提供按钮和下拉列表,javascript,java,jquery,jsp,Javascript,Java,Jquery,Jsp,我在我的应用程序中嵌入了谷歌图表,它显示在UI端,如下图所示: 此外,下拉列表如下图所示: 我在图表中附加了一个链接和一个按钮作为“导出”和“表格数据”,如上图所示。在“导出”中,我提供了一个下拉列表。在其他图表中,我只能得到“导出”链接,而不能得到下拉列表 为了嵌入各种图表,我为每个图表使用了单独的JSP文件,比如如果我嵌入了柱形图和饼图,那么我为这两个图表创建了不同的JSP文件 为了开发这个,我使用了两个JSP文件,一个是dashboardLayout.JSP,对于嵌入的各种图表,我使用

我在我的应用程序中嵌入了谷歌图表,它显示在UI端,如下图所示:

此外,下拉列表如下图所示:

我在图表中附加了一个链接和一个按钮作为“导出”和“表格数据”,如上图所示。在“导出”中,我提供了一个下拉列表。在其他图表中,我只能得到“导出”链接,而不能得到下拉列表

为了嵌入各种图表,我为每个图表使用了单独的JSP文件,比如如果我嵌入了柱形图和饼图,那么我为这两个图表创建了不同的JSP文件

为了开发这个,我使用了两个JSP文件,一个是dashboardLayout.JSP,对于嵌入的各种图表,我使用了foreach循环。 代码片段如下所示:

dashboardLayout.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 <style>
    button {
        color:#fff;
        background-image: linear-gradient(to bottom,#337ab7 0,#265a88 100%);
        padding: 5px 10px;
        font-size: px;
        line-height: 1.5;
        border-radius: 3px;
        cursor: pointer;
        border-color: #265a88;
        text-shadow: 0 -1px 0 rgba(0,0,0,.2);
        box-shadow: inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);
    }
    button:hover{
        background-image: linear-gradient(to top,#337ab7 0,#265a88 100%);
        box-shadow: inset 0 1px 0 rgba(255,255,255,.25),0 1px 1px rgba(0,0,0,.175);
    } 
</style> 

<style>
    .click {
         background:none!important;
         border:none; 
         padding:0!important;
         font-family:Helvetica Neue,Helvetica,Arial,sans-serif; /*input has OS specific font-family*/
         color:#333;
         cursor:pointer;
    }
    .dropdown {
        position: relative;
        display: inline-block;
    }
    .dropdownhover {
        font-family: Helvetica Neue,Helvetica,Arial,sans-serif;
        font-size: 15px;
    }
    .dropdown-content {
        display: none;
        position: absolute;
        background-color: #666666;
        min-width: 160px;
        box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
        z-index: 1;
    }
    
    .dropdown-content a {
        color: white;
        padding: 2px 2px; 
        text-align: left;
        text-decoration: none;
        display: block;
        font-family: Helvetica Neue,Helvetica,Arial,sans-serif;
    }
    
    .dropdown-content a:hover {background-color: #111111}
    
    .dropdown:hover .dropdown-content {
        display: block;
    }
    
    .dropdown:hover .dropbtn {
        background-color: #3e8e41;
    }
</style>

<script type="text/javascript">
    
    google.charts.load('current', {'packages':['corechart','table','timeline','charteditor']});

    $(document).ready(function() {
        
        $(".column").sortable({
                connectWith: ".column",
                handle: ".portlet-header",
                cancel: ".portlet-toggle",
                placeholder: "portlet-placeholder ui-corner-all",
                stop : function(event, ui) {
                    
                    var currentDivId = this.id;
                    var parentDivId  = $(ui.item).parents().attr('id')
                    
                    console.log('javascript ==>  currentDivId : '+currentDivId+", parentDivId : "+parentDivId);
                    if(currentDivId != parentDivId){
                        updateDashboardChartOrderAjaxFunction(currentDivId, parentDivId);  
                    } 
                } 
        }) 
                
        $(".portlet")
             .addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" )
             .find( ".portlet-header" )
             .addClass( "ui-widget-header ui-corner-all" )
             .prepend( "<span class='ui-icon ui-icon-minusthick portlet-toggle'></span>");
             
    });  
    
    function chartScrollBarHide(divId) {
        $('#'+divId).css("overflow-x", "hidden");
        $('#'+divId).css("margin-bottom", "48px");
    }
</script>

<c:forEach var="chart" items="${chartPropertiesList}" varStatus="theCount">

    <div class="column" id="${chart.merchantReportId}/${theCount.count}">
        <div class="portlet" id="${chart.chartHeaderTitle}"> 
            <div class="portlet-header">${chart.chartHeaderTitle}</div>
                
              <c:if test="${not empty chart.merchantReportData.responseData or not empty chart.merchantReportData.categoriesJsonData}">
                    <div style="text-align: center; padding: 5px 0px;" class="boson-font">
                         Change Chart : 
                         <select id="changeChart${theCount.count}" name="changeChart${theCount.count}" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif;font-size: 15px;" 
                                 onchange="changeChartAjaxFunction('${chart.merchantReportId}','${chart.chartDivId}',this.value);" >
                                
                            <c:forEach var="chartType" items="${chartTypeNameList}">    
                                <c:choose>
                                    <c:when test="${chartType.key eq chart.chartName}">
                                        <option value="${chartType.key}" selected="selected">${chartType.value}</option>
                                    </c:when>
                                    <c:otherwise>
                                        <option value="${chartType.key}">${chartType.value}</option>                    
                                    </c:otherwise>
                                </c:choose>
                            </c:forEach>                                                                                                      
                        </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <div class="dropdown">
                            <a href="#" class="dropdownhover">Export</a>
                                <div class="dropdown-content" id="export"></div>
                        </div> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <a href="#" class="dropdownhover" id="tables"></a> 
                    </div>   
              </c:if>
                
               <c:choose>
                    <c:when test="${chart.chartName eq 'columnbar'}">
                         <jsp:include page="chartsview/columnBarChart.jsp">
                            <jsp:param name="chartDivId" value="${chart.chartDivId}"/>
                            <jsp:param name="jsondata" value="${chart.merchantReportData.responseData}"/>
                            <jsp:param name="linkedJsonData" value="${chart.merchantReportData.responseLinkedData}"/>
                            <jsp:param name="xaxisLable" value="${chart.xAxisLable}"/>
                            <jsp:param name="yaxisLable" value="${chart.yAxisLable}"/>
                         </jsp:include> 
                         <div class="portlet-content" id="${chart.chartDivId}"> ColumnBar Chart load here </div>
                    </c:when>
                            
                    <c:when test="${chart.chartName eq 'pie'}">
                        <jsp:include page="chartsview/pieChart.jsp">
                            <jsp:param name="chartDivId" value="${chart.chartDivId}"/>
                            <jsp:param name="jsondata" value="${chart.merchantReportData.responseData}"/>
                            <jsp:param name="linkedJsonData" value="${chart.merchantReportData.responseLinkedData}"/>
                            <jsp:param name="xaxisLable" value="${chart.xAxisLable}"/>
                            <jsp:param name="yaxisLable" value="${chart.yAxisLable}"/>
                         </jsp:include>     
                         <div class="portlet-content" id="${chart.chartDivId}"> Pie Chart load here pie</div>
                    </c:when> 
                            
                </c:choose>
            </div>
    </div>
    
    <c:if test="${empty chart.merchantReportData.responseData and empty chart.merchantReportData.categoriesJsonData}">
        <script type="text/javascript">
            chartScrollBarHide('${chart.chartDivId}');
        </script>
    </c:if>
                
</c:forEach>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <div class="dropdown">
                                <a href="#" class="dropdownhover">Export</a>
                                    <div class="dropdown-content" id="export${theCount.count}"></div>
                            </div> 
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <a href="#" class="dropdownhover" id="tables${theCount.count}"></a> 
 <c:choose>
                        <c:when test="${chart.chartName eq 'columnbar'}">
                             <jsp:include page="chartsview/columnBarChart.jsp">
                                <jsp:param name="chartDivId" value="${chart.chartDivId}"/>
                                <jsp:param name="jsondata" value="${chart.merchantReportData.responseData}"/>
                                <jsp:param name="linkedJsonData" value="${chart.merchantReportData.responseLinkedData}"/>
                                <jsp:param name="xaxisLable" value="${chart.xAxisLable}"/>
                                <jsp:param name="yaxisLable" value="${chart.yAxisLable}"/>
                                <jsp:param name="exportParam" value="export${theCount.count}"/>
                                <jsp:param name="tablesParam" value="tables${theCount.count}"/>
                             </jsp:include> 
                             <div class="portlet-content" id="${chart.chartDivId}"> ColumnBar Chart load here </div>
                        </c:when>
</c:choose>

钮扣{
颜色:#fff;
背景图像:线性渐变(至底部,#337ab7 0,#265a88 100%);
填充物:5px10px;
字体大小:px;
线高:1.5;
边界半径:3px;
光标:指针;
边框颜色:#265a88;
文本阴影:0-1px0RGBA(0,0,0,2);
盒影:插入0 1px 0 rgba(255255255.15),0 1px 1px rgba(0,0,0.075);
}
按钮:悬停{
背景图像:线性渐变(到顶部,#337ab7 0,#265a88 100%);
盒影:插入0 1px 0 rgba(255255255.25),0 1px 1px rgba(0,0,0.175);
} 
.点击{
背景:无!重要;
边界:无;
填充:0!重要;
字体系列:Helvetica Neue、Helvetica、Arial、sans serif;/*input具有特定于操作系统的字体系列*/
颜色:#333;
光标:指针;
}
.下拉列表{
位置:相对位置;
显示:内联块;
}
.下拉悬停{
字体系列:Helvetica Neue、Helvetica、Arial、无衬线字体;
字体大小:15px;
}
.下拉内容{
显示:无;
位置:绝对位置;
背景色:#666666;
最小宽度:160px;
盒影:0px 8px 16px 0px rgba(0,0,0,0.2);
z指数:1;
}
.下拉内容a{
颜色:白色;
填充:2px2px;
文本对齐:左对齐;
文字装饰:无;
显示:块;
字体系列:Helvetica Neue、Helvetica、Arial、无衬线字体;
}
.下拉内容a:悬停{背景色:#111111}
.下拉:悬停.下拉内容{
显示:块;
}
.dropdown:悬停.dropbtn{
背景色:#3e8e41;
}
load('current',{'packages':['corechart','table','timeline','chartreditor']});
$(文档).ready(函数(){
$(“.column”).sortable({
连接到:“.column”,
句柄:“.portlet头”,
取消:“.portlet切换”,
占位符:“portlet占位符ui角点全部”,
停止:功能(事件、用户界面){
var currentDivId=this.id;
var parentDivId=$(ui.item).parents().attr('id'))
log('javascript==>currentDivId:'+currentDivId+”,parentDivId:“+parentDivId”);
if(currentDivId!=parentDivId){
updateDashboardChartOrderAjaxFunction(currentDivId,parentDivId);
} 
} 
}) 
$(“.portlet”)
.addClass(“ui小部件ui小部件内容ui帮助程序clearfix ui角点全部”)
.find(“.portlet头”)
.addClass(“ui小部件标题ui角点全部”)
.prepend(“”);
});  
函数chartScrollBarHide(divId){
$('#'+divId).css(“overflow-x”,“hidden”);
$('#'+divId).css(“边距底部”,“48px”);
}
${chart.chartHeaderTitle}
更改图表:
${chartType.value}
${chartType.value}
在此加载柱形图
饼图在此加载饼图
chartScrollBarHide('${chart.chartDivId}');
columBarChart.jsp

    <script type="text/javascript">
google.charts.load('current', {'packages':['corechart','table','timeline','charteditor']});
    google.charts.setOnLoadCallback(drawChart);
    
    var chartDivId = null;
    var options = null;
    var data = null;
    var fileName = 'Test';
    
    function AddNamespaceHandler() {
        var svg = jQuery("#"+chartDivId+" svg");
        svg.attr("xmlns", "http://www.w3.org/2000/svg");
        svg.css('overflow','visible');
    }
    
    function drawChart() {
        var chartData = [
                         ['Month', 'Bolivia', 'Ecuador', 'Madagascar', 'Rwanda', 'Average'],
                         ['2004/05',  165,      938,         522,         450,      614.6],
                         ['2005/06',  135,      1120,        599,         288,      682],
                         ['2006/07',  157,      1167,        587,         397,      623],
                         ['2007/08',  139,      1110,        615,         215,      609.4],
                         ['2008/09',  136,      691,         629,         366,      569.6]
                      ];
        
        chartDivId = "${param.chartDivId}";
        //chartDivId="17Div2";
        if(!chartDivId){
            chartDivId = "${chartDivId}";
        }
        console.log("columnbar div id: " + chartDivId);
        var xaxisLable = "${param.xaxisLable}";
        if(!xaxisLable){
            xaxisLable = "${xaxisLable}";
        }
        
        var yaxisLable = "${param.yaxisLable}";
        if(!yaxisLable){
            yaxisLable = "${yaxisLable}";
        }
        
        data = google.visualization.arrayToDataTable(chartData);
        
        options = {
            title: 'Monthly Coffee Production by Country',
            hAxis: {title: xaxisLable},
            vAxis: {title: yaxisLable},
            width : "600",
            height : "300"
        };
        
        var chart = new google.visualization.ColumnChart(document.getElementById(chartDivId));
        
        google.visualization.events.addListener(chart, 'ready', AddNamespaceHandler);
        chart.draw(data, options);
        
        var exportsColumn="return xepOnline.Formatter.Format('"+chartDivId+"', {render:'download', mimeType:'application/pdf', filename:'"+fileName+"'})";
        //jQuery('#export').html('<a href="#" onclick="'+ exports +'">Export To PDF</a>');
        
        var exportsColumn1="return xepOnline.Formatter.Format('"+chartDivId+"', {render:'download', mimeType:'image/svg+xml', filename:'"+fileName+"'})";
        
        jQuery('#export').html('<a href="#" onclick="'+ exportsColumn +'">Export To PDF</a> <a href="#" onclick="'+ exportsColumn1 +'">Export To Image</a>');
        
        // Chart Table Data - Start
         jQuery('#tables').html('<button class="click" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-shadow: 0 0 0 0;" data-toggle="modal" data-target="#openModal" onclick="loadExportChartTable();">Table Data</button>');
        
        var buttons="return xepOnline.Formatter.Format('parent_table', {render:'download',mimeType:'application/pdf', filename:'"+fileName+"'})";
        
        jQuery('#buttons_table').html('<button onclick="'+ buttons +'">PDF</button> &nbsp;&nbsp;&nbsp; <button onclick="dataTableToCSV();">EXCEL</button>');
        
        /* jQuery('#buttons_table').append("&nbsp;&nbsp;&nbsp;");
        
        jQuery('#buttons_table').append('<button onclick="dataTableToCSV();">EXCEL</button>'); */
        // Chart Table Data - End
    }
    
    // Load the Export Chart table data
    function loadExportChartTable() {
        var table_data = new google.visualization.Table(document.getElementById('table_div'));
        
        google.visualization.events.addListener(table_data, 'ready', AddNamespaceHandler);
        table_data.draw(data, {showRowNumber: false, width: '100%', height: '100%'});
    }
    
    function dataTableToCSV() {
        
        var dataTable_arg = data;
        
        var dt_cols = dataTable_arg.getNumberOfColumns();
        var dt_rows = dataTable_arg.getNumberOfRows();
        
        var csv_cols = [];
        var csv_out;
        
        for (var i=0; i<dt_cols; i++) {
            csv_cols.push(dataTable_arg.getColumnLabel(i).replace(/,/g,""));
        }
        
        csv_out = csv_cols.join(",")+"\r\n";
        
        for (i=0; i<dt_rows; i++) {
            
            var raw_col = [];
            for (var j=0; j<dt_cols; j++) {
                raw_col.push(dataTable_arg.getFormattedValue(i, j, 'label').replace(/,/g,""));
            }
            
            csv_out += raw_col.join(",")+"\r\n";
        }
        
        //return csv_out;
        this.downloadCSV(csv_out, fileName);
    }
    
    function downloadCSV (csv_out, fileName) {
        
        var blob = new Blob([csv_out], {type: 'text/csv;charset=utf-8'});
        var url  = window.URL || window.webkitURL;
        var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
        link.href = url.createObjectURL(blob);
        link.download = fileName+".csv"; 

        var event = document.createEvent("MouseEvents");
        event.initEvent("click", true, true);
        link.dispatchEvent(event); 
    }
</script>
var exportDiv = null;
var tableDiv = null;

exportDiv = "${param.exportParam}";
    tableDiv = "${param.tablesParam}";

jQuery('#'+exportDiv).html('<a href="#" onclick="'+ exports1 +'">Export To PDF</a> <a href="#" onclick="'+ exports +'">Export To Image</a>');

 jQuery('#'+tableDiv).html('<button class="click" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-shadow: 0 0 0 0;" data-toggle="modal" data-target="#openModal" onclick="loadExportChartTable();">Table Data</button>');

load('current',{'packages':['corechart','table','timeline','chartreditor']});
google.charts.setOnLoadCallback(drawChart);
var chartDivId=null;
var选项=null;
var数据=null;
var fileName='Test';
函数AddNamespaceHandler(){
var svg=jQuery(“#”+chartDivId+”s
var exportDiv = null;
var tableDiv = null;

exportDiv = "${param.exportParam}";
    tableDiv = "${param.tablesParam}";

jQuery('#'+exportDiv).html('<a href="#" onclick="'+ exports1 +'">Export To PDF</a> <a href="#" onclick="'+ exports +'">Export To Image</a>');

 jQuery('#'+tableDiv).html('<button class="click" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-shadow: 0 0 0 0;" data-toggle="modal" data-target="#openModal" onclick="loadExportChartTable();">Table Data</button>');