项目需求,需要用到报表插件,以前提到过用Highcharts 但商业用收费,继续找插件 后来找到了jqplot 虽然没有Highcharts 好看但能实现功能就行了。
直接贴代码
WEB端:
//柱状图函数
/*
多项数据对比显示 AJAX 返回 JSON对象必需类似于 [{'name':'名称1','list':[1,2],'year',2012},{'name':'名称2','list':[6,7],2013}]
显示出来的数据为2012(名称1:1,名称2:6),2013(名称1:2,名称2:7)
特别说明:因为分类提示框只接收JSON对象(label:name),所以在构建时添加 'label':[label:名称1]
*/
function createBarCharts(){
var ticks =[];//X轴显示数据数组
var labelsObj = []; //分类提示框数组
var ajaxDataRenderer = function (url,plot,options) {
var ret = null; //返回数据
var dataJson = [];
$.ajax({
async: false,
url: url,
dataType: "json",
success: function (data) {
for (var i = 0; i < data.length; i++) {
dataJson[i] = data[i].list;
ticks[i] = data[i].year;
labelsObj[i] = data[i].label;
}
ret = dataJson;
}
});
return ret;
};
var jsonurl = "/test/servlet/BarServlet"; //JSON数据地址
var options = {
title: "柱状图数据展现",//柱状图标题
seriesDefaults: {
renderer: $.jqplot.BarRenderer,//以柱图经行渲染
pointLabels:{show:true,stackedValue: true},//数据点显示参数
show: true
},
series: labelsObj,//分类栏
legend: { show: true,placement: 'outsideGrid'},//分类栏是否显示和位置设置
axes: {
//X轴显示内容 以容器解析 数组
xaxis: {renderer: $.jqplot.CategoryAxisRenderer,ticks:ticks
},
//Y轴显示内容 默认解析
yaxis: { renderer: $.jqplot.LogAxisRenderer }
},
dataRenderer: ajaxDataRenderer,
dataRendererOptions: { unusedOptionalUrl: jsonurl }
}
plot = $.jqplot("chart1",jsonurl,options);//创建柱状图
}
服务端(servlet):
response.setCharacterEncoding("UTF-8"); //设置编码格式
response.setContentType("text/html");
JSONArray members = new JSONArray();
PrintWriter out= response.getWriter();
try {
for(int i=1;i<5;i++){
JSONObject member = new JSONObject();
JSONObject label = new JSONObject();
member.put("label",label.put("label","张飞" + i));//构建分类提示框内容
JSONArray list = new JSONArray();
for(int k=1;k<5;k++){
list.put(k*100);
}
member.put("year",(2012 + i));//构建X轴显示内容
member.put("list",list); //构建数据
members.put(member);
}
out.write(members.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.flush();
out.close();
贴图: