這個有點亂,是在開發中,一點點加的,也有部分網上查的資料,請耐心閱讀。可以實現從jsp中獲得json資料動態更新圖表,還可以匯出,匯出的圖片中文亂碼問題會在下一篇中介紹。tangyj
目前可以解決通過ajax請求別的頁面的值,傳遞過來多個值,但是問題在於
1.不能同意把傳過來的data賦值給series
chart.addSeries(data)失效
2.不能設定多條線的chart.series[0].setName('123') ;失效
只能 chart.series[0].setData(a[0].data);
3.不能動態傳參過去,把值傳過來,如何解決這幾個問題該問題已經解決見下面的jsp)
首頁面需要匯入
<scripttype="text/javascript"src="../common/tang/highcharts.js"></script>
請求頁面需要匯入
<%@pageimport="org.json.simple.*"%>
若需要匯出圖片,需要加入
exporting.js檔案
並在lib中加入以上jar包
修改highchart的值的一些例子:
動態修改組件
http://www.stepday.com/topic/?292
http://www.stepday.com/search/?API
http://www.baidu.com/s?tn=baiduhome_pg&ie=utf-8&bs=highchart+doc&f=8&rsv_bp=1&rsv_spt=1&wd=highcharts%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3&rsv_sug3=7&rsv_sug=1&rsv_sug1=7&rsv_sug4=80&inputT=5552
http://api.highcharts.com/highcharts
首頁面
<scripttype="text/javascript">
varchart;
$(function(){
vardate=['1月','2月','3月','4月', '5月','6月','7月','8月','9月', '10月','11月','12月'];
functiongetForm(){
//聲明報表對象
chart =newHighcharts.Chart({
chart: {
//將報表對象渲染到層上
// type:'column',
renderTo:'container'//,
//backgroundColor: {
//linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
//stops: [
// [0, 'rgb(96, 96, 96)'],
// [1, 'rgb(16, 16, 16)']
// ]
// }
},
title:{
text:'機構考核結果統計'
},
xAxis : {
title:'月份',
categories : date
},
yAxis : {
title : {
text :'人數(個)'
},
plotLines : [ {
value : 0,
width : 1,
color :'#808080'
} ]
},
tooltip : {
formatter :function() {
return'<b>'+this.series.name
+'</b><br/>'+this.x +': '
+this.y +'人';
}
},
legend: {
itemStyle: {
font:'9pt Trebuchet MS, Verdana, sans-serif',
color:'#3E576F'
},
itemHoverStyle: {
color:'black'
},
itemHiddenStyle: {
color:'silver'
}
},
//設定報表對象的初始資料
series: [{
name:'在職人數',
data: []
},
{
name:'入職人數',
data: []
},
{
name:'離職人數',
data: []
},
]
});
//使用JQuery從後台擷取JSON格式的資料
$.get('tang.jsp?date='+newDate(),null,function(data) {
//var data=[222, 344, 543];
//var data='['+eval(data)+']';
alert(data+"12319");
var a=eval(data);
alert(a[0].data);
//chart.series[0].setName('123') ; //為圖表設定值
chart.series[0].setData(a[0].data);//動態設定資料
chart.series[1].setData(a[1].data);//動態設定資料
chart.series[2].setData(a[2].data);//動態設定資料
// chart.addSeries(a); //給series整體賦值,目前存在問題,不能實現
// for(var i=0;i<3;i++)
// {
// alert(i);
// var s1="[";
// var s2="]";
// var s=s1+a[i].data+s2;
// alert(s);
// chart.series[i].setName("123") ;
// chart.series[i].setData(s) ;
// }
// chart.xAxis[0].setCategories(a); //動態設定橫座標的值
});
ni();
}
functionni()
{
vara=[1,2,3];
alert("123");
//chart.series[0].setData(a);
alert("ee");
}
$(document).ready(function() {
alert(2);
//每隔3秒自動調用方法,實現圖表的即時更新
window.setInterval(getForm);
alert("kaishi");
});
});
//]]>
</script>
請求頁面
<%@pageimport="java.io.PrintWriter"%>
<%@pageimport="java.util.ArrayList"%>
<%@pageimport="java.util.List"%>
<%@pageimport="java.util.*"%>
<%@pageimport="javax.servlet.http.HttpServletResponse"%>
<%@pageimport="java.io.IOException"%>
<%@pageimport=" javax.servlet.ServletException"%>
<%@pageimport="javax.servlet.http.HttpServlet"%>
<%@pageimport="javax.servlet.http.HttpServletRequest"%>
<%@pageimport="org.json.simple.*"%>
<%
JSONArray JArray =newJSONArray();
StringBuilder sBuilder =newStringBuilder();
StringBuilder sBuilder1 =newStringBuilder();
StringBuilder sBuilder2 =newStringBuilder();
StringBuilder sBuilder3 =newStringBuilder();
//String sql="select branchtype,wageorder from laindexvscomm where wageorder=10 and ccolname='LongSerBonus' and indexcode='C00038' and areatype='08'";
String sqlpeople="select count(agentcode) 人數,substr(employdate,6,2) 日期 from laagent where agentstate<>0 group by substr(employdate,6,2)";
String sqlin="select count(agentcode) 人數,substr(employdate,6,2) 日期 from laagent where sex='1' group by substr(employdate,6,2)";
String sqlout="select count(agentcode) 人數,substr(outworkdate,6,2) 日期 from laagent where substr(outworkdate,6,2)is not null group by substr(outworkdate,6,2)";
ExeSQL tExeSql=newExeSQL();
SSRS sSSRSpeople=newSSRS();
SSRS sSSRSin=newSSRS();
SSRS sSSRSout=newSSRS();
sSSRSpeople =tExeSql.execSQL(sqlpeople);
sSSRSin =tExeSql.execSQL(sqlin);
sSSRSout=tExeSql.execSQL(sqlout);
sBuilder1.append("[");
for(inti=1; i<= sSSRSpeople.MaxRow; i++){// for(int i=0; i<= 0; i++){
String a = sSSRSpeople.GetText(i,1);
sBuilder1.append(a);
if(i<sSSRSpeople.MaxRow)
{
sBuilder1.append(",");
}
}
sBuilder1.append("]");
sBuilder2.append("[");
for(inti=1; i<= sSSRSin.MaxRow; i++){// for(int i=0; i<= 0; i++){
String a = sSSRSin.GetText(i,1);
sBuilder2.append(a);
if(i<sSSRSin.MaxRow)
{
sBuilder2.append(",");
}
}
sBuilder2.append("]");
sBuilder3.append("[");
for(inti=1; i<= sSSRSout.MaxRow; i++){// for(int i=0; i<= 0; i++){
String a = sSSRSout.GetText(i,1);
sBuilder3.append(a);
if(i<sSSRSout.MaxRow)
{
sBuilder3.append(",");
}
}
sBuilder3.append("]");
String ss1="[23,23,33,34,46,66]";
String ss="[ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']";
sBuilder.append(sBuilder1).append(sBuilder2).append(sBuilder3);
System.out.println(sBuilder1+"1--------"+sBuilder2+"2-------"+sBuilder3+"3-------"+sBuilder);
JSONObject JSONObj1 =newJSONObject();
JSONObj1.put("name","在職人數");
JSONObj1.put("data", sBuilder1);
JArray.add(JSONObj1);
JSONObject JSONObj2 =newJSONObject();
JSONObj2.put("name","離職人數");
JSONObj2.put("data", sBuilder2);
JArray.add(JSONObj2);
JSONObject JSONObj3 =newJSONObject();
JSONObj3.put("name","入職人數");
JSONObj3.put("data", sBuilder3);
JArray.add(JSONObj3);
System.out.println(JArray.toString());
//out.write(JArray.toString().replace("\"{", "{").replace("}\"", "}"));
System.out.println(JArray.toString());
//response.getWriter().write(sBuilder.toString());
//response.getWriter().write(JArray.toString());
//response.getWriter().print(ss);
response.getWriter().print(JArray.toJSONString());
//out.flush();
//response.getWriter().write(ss1);
//out.write(ss1);
//out1.print(jsonArray2);
%>
解決動態傳參問題,可以點擊查詢出發getForm函數,然後傳參,form可以寫到別的js中去
<scripttype="text/javascript">
varchart;
$(function(){
alert(1);
vardate=['1月','2月','3月','4月', '5月','6月','7月','8月','9月', '10月','11月','12月'];
//聲明報表對象
chart =newHighcharts.Chart({
chart: {
//將報表對象渲染到層上
// type:'column',
renderTo:'container'//,
//backgroundColor: {
//linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
//stops: [
// [0, 'rgb(96, 96, 96)'],
// [1, 'rgb(16, 16, 16)']
// ]
// }
},
title:{
text:'機構考核結果統計'
},
xAxis : {
title:'月份',
categories : date
},
yAxis : {
title : {
text :'人數(個)'
},
plotLines : [ {
value : 0,
width : 1,
color :'#808080'
} ]
},
tooltip : {
formatter :function() {
return'<b>'+this.series.name
+'</b><br/>'+this.x +': '
+this.y +'人';
}
},
legend: {
itemStyle: {
font:'9pt Trebuchet MS, Verdana, sans-serif',
color:'#3E576F'
},
itemHoverStyle: {
color:'black'
},
itemHiddenStyle: {
color:'silver'
}
},
//設定報表對象的初始資料
series: [{
name:'在職人數',
data: []
},
{
name:'入職人數',
data: []
},
{
name:'離職人數',
data: []
},
]
});
//使用JQuery從後台擷取JSON格式的資料
//$.get('tang.jsp?date='+new Date(), null, function(data) {
//var data=[222, 344, 543];
//var data='['+eval(data)+']';
//alert(data+"12319");
// var a=eval(data);
// alert(a[0].data);
//chart.series[0].setName('123') ; //為圖表設定值
// chart.series[0].setData(a[0].data); //動態設定資料
// chart.series[1].setData(a[1].data); //動態設定資料
// chart.series[2].setData(a[2].data); //動態設定資料
// chart.addSeries(a); //給series整體賦值,目前存在問題,不能實現
// for(var i=0;i<3;i++)
// {
// alert(i);
// var s1="[";
// var s2="]";
// var s=s1+a[i].data+s2;
// alert(s);
// chart.series[i].setName("123") ;
// chart.series[i].setData(s) ;
// }
// chart.xAxis[0].setCategories(a); //動態設定橫座標的值
//});
});
functiongetForm(){
//var data = ["['Firefox',45.0]","[{name: 'Chrome',y: 26.8,sliced: true,selected: true}]","['IE',12.8]","['Safari',8.5]","['Opera',6.2]","['Others',0.7]"];
//var data = "[{'Firefox',45.0},{'Chrome',26.8},{'IE',12.8},{'Safari',8.5},{'Opera',6.2},{'Others',0.7}]";
// var data = [['Firefox2',45.0],{name: 'Chrome',y: 26.8,sliced: true,selected: true},['IE',12.8],['Safari',8.5],['Opera',6.2],['Others',0.7]];
// var data= [{"name":"在職人數","data":[2654,2519,5413,6422,4987,5210,4238,4586,4665,3228,3906,5587]},{"name":"離職人數","data":[1441,1418,3016,3826,2893,2990,2425,2513,2665,1940,2211,3211]},{"name":"入職人數","data":[2460,2159,3564,3037,2767,3321,3127,3141,3135,2547,3245,4364]}];
// alert(data);
// var a=eval(data);
//使用JQuery從後台擷取JSON格式的資料
$.get('tang.jsp?date='+newDate(),null,function(data) { alert("---");
//var data=[222, 344, 543];
//var data='['+eval(data)+']';
// alert(data+"1231449");
var a=eval(data);
// alert(a[0].data);
//chart.series[0].setName('123') ; //為圖表設定值
chart.series[0].setData(a[0].data);//動態設定資料
chart.series[1].setData(a[1].data);//動態設定資料
chart.series[2].setData(a[2].data);//動態設定資料
// chart.series[0].setData(a);
//}
chart.redraw();
});
}
$(document).ready(function() {
alert(2);
//每隔3秒自動調用方法,實現圖表的即時更新
//window.setInterval(getForm);
getForm();
alert("kaishi");
});
//]]>
</script>
以下是網上的動態ajax請求
<script type="text/javascript">
var chart;
$(function(){
$.ajax({
type: 'POST',
dataType: 'JSON',
url: '${pageContext.request.contextPath}/analyseResultAction!getPlusCharts.action',
success : function(result){
//此處構建曲線
$('#container').highcharts({
chart:{
defaultSeriesType: 'spline',//圖表的顯示類型line,spline,scatter,splinearea bar,pie,area,column)
marginRight: 125,//上下左右空隙
marginBottom: 25 //上下左右空隙
},
title:{
text: '外掛程式分析視圖',//主標題
x: -20 //center
},
xAxis: { //橫座標
<SPAN style="COLOR: #ff0000">categories: result.listXdata //動態解析</SPAN>
},
yAxis: {
title: {
text: '' //縱座標
},
plotLines: [{ //標線屬性
value: 0,
width: 1,
color: 'red'
}]
},
tooltip: { //資料點的提示框
formatter: function() { //formatter格式化函數
return '<b>'+ this.series.name +'</b><br/>'+
this.x +': '+ this.y;
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
<SPAN style="COLOR: #ff0000">series:result.</SPAN><SPAN style="LINE-HEIGHT: 1.5; FONT-FAMILY: Helvetica, Tahoma, Arial, sans-serif; COLOR: #ff0000">listYdata</SPAN><SPAN style="LINE-HEIGHT: 1.5; FONT-FAMILY: Helvetica, Tahoma, Arial, sans-serif; COLOR: #ff0000"> //動態解析</SPAN>
});
}
});
});
</script>
很好的例子
http://wenku.baidu.com/view/f39593c76137ee06eff9189e.html
含有匯出功能
exporting: { filename: "chart", type: "image/png", url: 'http://localhost:8888/dcweb/pp.do', width: 800 },
<scripttype="text/javascript">
varchart;
$(function(){
vardate=['1月','2月','3月','4月', '5月','6月','7月','8月','9月', '10月','11月','12月'];
//聲明報表對象
chart =newHighcharts.Chart({
chart: {
renderTo:'container'
},
title:{
text:'年度人力統計'
},
xAxis : {
title:{text:'月份'} ,
categories : date
},
yAxis : {
title : {
text :'人數(個)'
},
plotLines : [ {
value : 0,
width : 1,
color :'#808080'
} ]
},
tooltip : {
formatter :function() {
return'<b>'+this.series.name
+'</b><br/>'+this.x +': '
+this.y +'人';
}
},
legend: {
itemStyle: {
font:'9pt Trebuchet MS, Verdana, sans-serif',
color:'#3E576F'
},
itemHoverStyle: {
color:'black'
},
itemHiddenStyle: {
color:'silver'
}
},
//增加匯出功能
exporting: {
enabled:true,
filename:'chart',
width:800,
type:'image/png'
},
//去掉highcharts.com的標誌
credits:{
text:'中科軟科技',
href:' '
},
//設定報表對象的初始資料
series: [{
name:'在職人數',
data: []
},
{
name:'入職人數',
data: []
},
{
name:'離職人數',
data: []
},
]
});
});
functiongetForm(){
vartime= $("#time").val();
varmanagecom=$("#ManageCom").val();
varbranchattr=$("#BranchAttr").val();
//使用JQuery從後台擷取JSON格式的資料
$.get('tang.jsp?date='+newDate()+'&time='+time+'&managecom='+managecom+'&branchattr='+branchattr,null,function(data) {
var a=eval(data);
//為圖表設定值
chart.series[0].setData(a[0].data);//動態設定資料
chart.series[1].setData(a[1].data);//動態設定資料
chart.series[2].setData(a[2].data);//動態設定資料
//測試tangyj826
chart.xAxis[0].addPlotBand({
from: 0.8,
to: 7.5,
color:'#FCFFC5',
id:'XX公司'
});
chart.xAxis[0].addPlotLine({
value: 3.5,
color:'green',
width: 2,
id:'plot-line-1'
});
//chart.setTitle('eee');
//擷取圖表的臨界資料
varextremes = chart.yAxis[0].getExtremes();
//縱座標最大最小值
varmax = extremes.max;
varmin = extremes.min;
//series內資料的最大最小值
vardataMax = extremes.dataMax;
vardataMin = extremes.dataMin;
// alert("max:"+max+"min:"+min+"datam:"+dataMax+"dataM:"+dataMin);
// chart.xAxis[0].setCategories(['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],true);
//設定x軸的臨界值
// chart.xAxis[0].setExtremes(0, 5,true,true);
//設定y軸的臨界值
// chart.yAxis[0].setExtremes(0, 300,true,true);
alert(chart.series.length);
if(chart.series.length == 3) {
chart.addSeries({
name:'ceshi',
data: [194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4]
});
}
chart.exportChart({
type:'application/pdf',
filename:'fff'
});
chart.exportChart( { exportFormat :'jpg'} );
chart.redraw();
});
}
$(document).ready(function() {
//每隔3秒自動調用方法,實現圖表的即時更新
//window.setInterval(getForm);
getForm();
});
functiondownload7(){
getForm();
varw = window.open("","_self");
w.location.href="../download/niandurenli.xlsx";
/// var file1="../download/niandurenli.xlsx";
//window.location.href(file1);
}
functiontuxing(){
getForm();
alert("繪製完成");
}
</script>
本文出自 “註冊” 部落格,請務必保留此出處http://6203973.blog.51cto.com/6193973/1297382