Javascript 在谷歌图表中提供按钮和下拉列表
我在我的应用程序中嵌入了谷歌图表,它显示在UI端,如下图所示: 此外,下拉列表如下图所示: 我在图表中附加了一个链接和一个按钮作为“导出”和“表格数据”,如上图所示。在“导出”中,我提供了一个下拉列表。在其他图表中,我只能得到“导出”链接,而不能得到下拉列表 为了嵌入各种图表,我为每个图表使用了单独的JSP文件,比如如果我嵌入了柱形图和饼图,那么我为这两个图表创建了不同的JSP文件 为了开发这个,我使用了两个JSP文件,一个是dashboardLayout.JSP,对于嵌入的各种图表,我使用了foreach循环。 代码片段如下所示: dashboardLayout.jspJavascript 在谷歌图表中提供按钮和下拉列表,javascript,java,jquery,jsp,Javascript,Java,Jquery,Jsp,我在我的应用程序中嵌入了谷歌图表,它显示在UI端,如下图所示: 此外,下拉列表如下图所示: 我在图表中附加了一个链接和一个按钮作为“导出”和“表格数据”,如上图所示。在“导出”中,我提供了一个下拉列表。在其他图表中,我只能得到“导出”链接,而不能得到下拉列表 为了嵌入各种图表,我为每个图表使用了单独的JSP文件,比如如果我嵌入了柱形图和饼图,那么我为这两个图表创建了不同的JSP文件 为了开发这个,我使用了两个JSP文件,一个是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>
<div class="dropdown">
<a href="#" class="dropdownhover">Export</a>
<div class="dropdown-content" id="export"></div>
</div>
<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>
<div class="dropdown">
<a href="#" class="dropdownhover">Export</a>
<div class="dropdown-content" id="export${theCount.count}"></div>
</div>
<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> <button onclick="dataTableToCSV();">EXCEL</button>');
/* jQuery('#buttons_table').append(" ");
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>');