近期公司接了个关于数据统计的系统。须要用到报表功能。找了几天认为还是FushionCharts

适合。所以就对FushionCharts进行了java代码封装,方便,前台,后台调用。

1.报表Model 文件,数据封装

package hh.com.fushionchart.Model;
/**
* 报表Model 文件,数据封装
* @author 尹晶晶
*
*/
public class FChart {
/**
* 报表swf文件,默认线形图
*/
private String fileName="MSLine.swf"; /**
* 数据
*/
private String xmlData="";//数据
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getXmlData() {
return xmlData;
}
public void setXmlData(String xmlData) {
this.xmlData = xmlData;
}
/**
* Model转成JSON
* @return
*/
public String getJSON(){
return "{\"fileName\":\""+this.fileName+"\",\"xmlData\":\""+this.xmlData+"\"}";
}
}

2.FushionChart功能报表封装

package hh.com.fushionchart;

import hh.com.carrier.DataTable;
import hh.com.carrier.SHashMap;
import hh.com.control.flashchart.model.AmbarDataSetModel;
import hh.com.control.flashchart.model.AmlineDataSetModel;
import hh.com.control.flashchart.model.AmpieDataSetModel;
import hh.com.control.flashchart.util.FlashChartHandler;
import hh.com.fushionchart.Model.FChart; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID; /**
* 绘图工具,主要用来画二维和三维图形(饼状图,柱状图,曲线图) 使用说明:
* 1,创建该类的一个构造函数,假设构造函数里的參数不是你想要的,你能够通过get/set方法设置. 2, 依据自己的须要画什么样的图就调用什么方法。 3,
* 样例: DrawDesigns d = new DrawDesigns(......); String str = d.drawPie2D();
* 这个str參数就是所有数据,前台能够直接使用这个參数(str),注意页面不用导入js文件。 前台页面:(比方jsp页面) ${str}
* 或者<%=str%>
*
*/
public class FushionChart {
// 默认參数
private static final String CAPTION = "统计分析图";// 标题 private static final String XAXISNAME = "数据源名称";// 横坐标名称 private static final String YAXISNAME = "Value";// 纵坐标名称 private static final String WIDTH = "600";// 默认的宽度,意思同width变量一样 private static final String HEIGHT = "400";// 默认的高度,意思同height变量一样 private static final String JSPATH = "../FusionCharts/JSClass/FusionCharts.js";// JS路径 private static final String SWFPATH = "../FusionCharts/INFOSOFTGLOBAL.COM/";// SWF路径 private static final String XMLHEADER = "<? xml version='1.0' encoding='UTF-8'? >";// XML默认开头 // 用户自己定义
private Integer chartType=1;//图形类型 1柱形图,2线形图,3饼形图
private Integer chartShowType=2;//图形类型默觉得2=2D,3=3D
private Integer chartWeiType=2;//图形默觉得2维,3=多维
private String[] groupColumn;//多维图形列英文名
private String[] groupName;//多维图形列中文名
private String chartRightMargin="35";//X轴最右边距离框架最右边多宽 private String caption;// 图形的标题名称 private String xAxisName;// 横向坐标轴(x轴)名称 private String yAxisName;// 纵向坐标轴(y轴)名称 private String numberPrefix="";//纵向坐标轴(y轴)值前缀
private String numberSuffix="";//纵向坐标轴(y轴)值后缀 private String width;// x轴宽,事实上设置成Double类型的变量也能够,可是没有必要精算到浮点型,Integer就够了,除非业务有必要的说明 private String height;// y轴宽,事实上设置成Double类型的变量也能够,可是没有必要精算到浮点型,Integer就够了,除非业务有必要的说明 private String jsPath;// 这样的写法意思是FusionCharts这个包和你自己写的文件包处于同一个文件夹下,默认的js路径就是这个 private String swfPath;// 这个仅仅能指定包名,由于这个Charts包以下全是swf文件,仅仅能依据客户需求加swf文件 private String divId = "drawDiv" + UUID.randomUUID().toString();// 把封装好的xml数据放到前台页面显示在哪个区域,比方div,所以areaName意思是指定这个区域的名字,这里给他一个默认的。 private String colors[] = { "1D8BD1", "F1683C", "2AD62A", "DBDC25",
"649665", "4169E1", "087eb6", "BA55D3", "D2691E", "FF7F50",
"32CD32", "4682B4" };// 指定颜色,能够依据自己的喜欢随便写,这个数组的长度不限,主要是显示图形时好区分,假设你弄成统一的颜色,会非常单调,能够考虑编写个随机颜色程序。 private String myChartName; // 一维数据(意思是比方曲线图上仅仅显示一条曲线)
private List<Map<Object, Object>> oneDimensionsList = new ArrayList<Map<Object, Object>>(); // 多维数据(意思是比方曲线图上显示多条曲线)
private Map<Object, Map<Object, Object>> manyDimensionsMap = new HashMap<Object, Map<Object, Object>>(); // x轴名称集合(是用来做多条曲线用的,主要是多个集合共享x轴名称)
private List<String> xAxisNameList = new ArrayList<String>(); private boolean benchmark = false;// 是否显示基准线 private String benchmarkName;// 基准线名称 private Object benchmarkValue;// 基准线值 /**
* 默认的构造方法
*/
public FushionChart() {
this.verifyParams();// 赋默认值
} /**
* 针对一维数据所建立的构造方法
*
* @param caption
* @param xAxisName
* @param yAxisName
* @param width
* @param height
* @param oneDimensionsList
*/
public FushionChart(String caption, String xAxisName, String yAxisName,
String width, String height,
List<Map<Object, Object>> oneDimensionsList) {
this.caption = caption;
this.xAxisName = xAxisName;
this.yAxisName = yAxisName;
this.width = width;
this.height = height;
this.oneDimensionsList = oneDimensionsList;
this.verifyParams();
} /**
* 针对一维数据所建立的构造方法,该方法含有js路径
*
* @param caption
* @param xAxisName
* @param yAxisName
* @param width
* @param height
* @param jsPath
* @param swfPath
* @param oneDimensionsList
*/
public FushionChart(String caption, String xAxisName, String yAxisName,
String width, String height, String jsPath, String swfPath,
List<Map<Object, Object>> oneDimensionsList) {
this.caption = caption;
this.xAxisName = xAxisName;
this.yAxisName = yAxisName;
this.width = width;
this.height = height;
this.jsPath = jsPath;
this.swfPath = swfPath;
this.oneDimensionsList = oneDimensionsList;
this.verifyParams();
} /**
* 该构造方法是为多维数据写的(带js路径): List<String>含义是x轴的名称, Map<Object, Map<Object,
* Object>>含义是每一维所相应的值的集合. 样例:List<String> = {"一月","二月","三月","四月","五月"}
* Map<Map<Object, Map<Object, Object>>> = {
* {2009年,{{"一月",100},{"二月",200},{"三月",300}...}},
* {2010年,{{"一月",100},{"二月",200},{"三月",300}...}}... }
*
* @param caption
* @param xAxisName
* @param yAxisName
* @param width
* @param height
* @param jsPath
* @param swfPath
* @param xAxisNameList
* @param manyDimensionsMap
*/
public FushionChart(String caption, String xAxisName, String yAxisName,
String width, String height, String jsPath, String swfPath,
List<String> xAxisNameList,
Map<Object, Map<Object, Object>> manyDimensionsMap) {
this.caption = caption;
this.xAxisName = xAxisName;
this.yAxisName = yAxisName;
this.width = width;
this.height = height;
this.jsPath = jsPath;
this.swfPath = swfPath;
this.xAxisNameList = xAxisNameList;
this.manyDimensionsMap = manyDimensionsMap;
} /**
* 针对多维数据所建立的构造方法 同上一样,仅仅只是是不带js路径
*
* @param caption
* @param xAxisName
* @param yAxisName
* @param width
* @param height
* @param xAxisNameList
* @param manyDimensionsMap
*/
public FushionChart(String caption, String xAxisName, String yAxisName,
String width, String height, List<String> xAxisNameList,
Map<Object, Map<Object, Object>> manyDimensionsMap) {
this.caption = caption;
this.xAxisName = xAxisName;
this.yAxisName = yAxisName;
this.width = width;
this.height = height;
this.xAxisNameList = xAxisNameList;
this.manyDimensionsMap = manyDimensionsMap;
this.verifyParams();
} /**
* 获取swf动画的路径
*
* @param swfName
* @return
*/
private String getSWFPath(String swfName) {
return this.swfPath + swfName;
} /**
* 客户有可能须要达标线,所以这里设置一下达标线的參数
*
* @param ifBenchmark
* 是否显示达标线
* @param benchmarkName
* 达标线名称
* @param benchmarkValue
* 达标线值
*/
public void setBenchmark(boolean ifBenchmark, String benchmarkName,
Object benchmarkValue) {
this.benchmark = ifBenchmark;
this.benchmarkName = benchmarkName;
this.benchmarkValue = benchmarkValue;
} /**
* 假设用户在前台不设置參数,比如这个參数为null或者是"",那么这里给他一个默认的參数值
*/
private void verifyParams() {
if (this.width == null || this.width.equals("")) {
this.width = WIDTH;
}
if (this.height == null || this.height.equals("")) {
this.height = HEIGHT;
}
if (this.xAxisName == null || this.xAxisName.equals("")) {
this.xAxisName = XAXISNAME;
}
if (this.yAxisName == null || this.yAxisName.equals("")) {
this.yAxisName = YAXISNAME;
}
if (this.caption == null || this.caption.equals("")) {
this.caption = CAPTION;
}
if (this.jsPath == null || this.jsPath.equals("")) {
this.jsPath = JSPATH;
}
if (this.swfPath == null || this.swfPath.equals("")) {
this.swfPath = SWFPATH;
}
if (this.myChartName == null || this.myChartName.equals("")) {
this.myChartName = "myChart" + (new Random()).nextInt(10000);
}
if (this.oneDimensionsList.isEmpty()) {
this.oneDimensionsList = new ArrayList<Map<Object, Object>>();
}
if (this.manyDimensionsMap.isEmpty()) {
this.manyDimensionsMap = new HashMap<Object, Map<Object, Object>>();
}
if (this.xAxisNameList.isEmpty()) {
this.xAxisNameList = new ArrayList<String>();
} } /**
* 载入js
*
* @return
*/
private String getDivAndJs() {
return "<div style=\"width: 0px; height: 0px\"><script type=\"text/javascript\" src=\""
+ this.jsPath
+ "\"></script></div>"
+ "<div id=\""
+ this.divId + "\" align = \"center\">无数据显示.</div>";
} /**
* 解析一维图形的xml数据
*
* @return
*/
private String getOneDimensionsXmlData() {
StringBuffer buffer = new StringBuffer("");
buffer
.append("<chart caption='")
.append(this.caption)
.append("' xAxisName='")
.append(this.xAxisName)
.append("' yAxisName='")
.append(this.yAxisName)
.append("' numberPrefix='")
.append(this.numberPrefix)
.append("' numberSuffix='")
.append(this.numberSuffix)
.append("' chartRightMargin='")
.append(this.chartRightMargin)
.append(
"' showNames='1' decimalPrecision='0' baseFontSize='12' formatNumberScale='0' >");
for (Map<Object, Object> map : this.oneDimensionsList) {
buffer.append("<set label='").append(map.get("x")).append(
"' value='").append(map.get("y")).append("' color='")
.append(this.getRandomColor()).append("' />");
}
buffer.append("</chart>");
return buffer.toString();
} /**
* 绘图,主要是把js,xml,swf等数据封装起来
*
* @param swfName
* @param xmlData
* @return
*/
private FChart getDrawChart(String swfName, String xmlData) {
/*yc StringBuffer buffer = new StringBuffer(this.getDivAndJs()
+ "<script type=\"text/javascript\"> ");
buffer.append("var ").append(this.myChartName).append(
"= new FusionCharts(\"" + this.getSWFPath(swfName)
+ "\", \"myChart" + UUID.randomUUID().toString()
+ "\", \"" + this.width + "\", \"" + this.height
+ "\", \"0\", \"0\"); ").append(this.myChartName)
.append(".setDataXML(\"" + XMLHEADER + xmlData + "\"); ")
.append(this.myChartName).append(".render(\"").append(
this.divId).append("\");</script>");
return buffer.toString();*/
FChart fc=new FChart();
fc.setFileName(swfName);
fc.setXmlData(XMLHEADER+xmlData);
return fc;
} /**
* 解析多维图形的xml数据
*
* @return
*/
private String getManyDimensionsXmlData() {
StringBuffer buffer = new StringBuffer("");
buffer
.append("<chart caption='")
.append(this.caption)
.append("' xAxisName='")
.append(this.xAxisName)
.append("' yAxisName='")
.append(this.yAxisName)
.append("' numberPrefix='")
.append(this.numberPrefix)
.append("' numberSuffix='")
.append(this.numberSuffix)
.append("' chartRightMargin='")
.append(this.chartRightMargin)
.append(
"' showValues='0' baseFontSize='12' palette='1' showFCMenuItem='1' imageSave='1' formatNumberScale='0' >");
buffer.append("<categories>");
for (String str : xAxisNameList) {
buffer.append("<category label='" + str + "' />");
}
buffer.append("</categories>");
for (Map.Entry<Object, Map<Object, Object>> values : this.manyDimensionsMap
.entrySet()) {
buffer.append("<dataset seriesName='").append(values.getKey())
.append("'>");
for (String str : this.xAxisNameList) {
buffer.append("<set value='")
.append(values.getValue().get(str)).append("'/>");
}
buffer.append("</dataset>");
}
buffer.append(this.benchmark());
buffer.append("</chart>");
return buffer.toString();
} /**
* 封装达标线的xml数据
*
* @return
*/
private String benchmark() {
StringBuffer buffer = new StringBuffer("");
if (this.benchmark
&& (this.benchmarkName != null && !this.benchmarkName
.equals(""))
&& (this.benchmarkValue != null && !this.benchmarkValue
.equals(""))) {
buffer.append("<trendlines><line startValue='").append(
this.benchmarkValue).append(
"' color='91C728' displayValue='").append(
this.benchmarkName).append(
"' showOnTop='1' /></trendlines>");
}
return buffer.toString();
} /**
* 从colors数组随机选取一个颜色
*
* @return
*/
private String getColor() {
if (oneDimensionsList.size() <= 0) {
return this.colors[(new Random()).nextInt(this.colors.length)];
} else {
return this.colors[(new Random()).nextInt(oneDimensionsList.size())];
}
} /**
* 生产随机颜色
*
* @return
*/
private String getRandomColor() {
return (UUID.randomUUID().toString()).substring(0, 6);
} /**
* 2维饼状图
*
* @return
*/
public FChart drawPie2D() {
return this.getDrawChart("Pie2D.swf", this.getOneDimensionsXmlData()); } /**
* 3维饼状图
*
* @return
*/
public FChart drawPie3D() {
return this.getDrawChart("Pie3D.swf", this.getOneDimensionsXmlData());
} /**
* 2维柱状图
*
* @return
*/
public FChart drawColumn2D() {
return this
.getDrawChart("Column2D.swf", this.getOneDimensionsXmlData());
} /**
* 3维柱状图
*
* @return
*/
public FChart drawColumn3D() {
return this
.getDrawChart("Column3D.swf", this.getOneDimensionsXmlData());
} /**
* 2维曲线图
*
* @return
*/
public FChart drawLine2D() {
return this.getDrawChart("Line.swf", this.getOneDimensionsXmlData());
} /**
* 3维曲线图 这种方法临时不能使用,由于关于曲线图一维数据的swf文件临时没找到
*
* @return
*/
public FChart drawLine3D() {
return this.getDrawChart("Line.swf", this.getOneDimensionsXmlData());
} // ==============以下是多维数据柱状图,曲线图=============== /**
* 多维2D柱状图
*
* @return
*/
public FChart drawColumn2DGroup() {
return this.getDrawChart("MSColumn2D.swf", this
.getManyDimensionsXmlData());
} /**
* 多维2D曲线图
*
* @return
*/
public FChart drawLine2DGroup() {
return this.getDrawChart("MSLine.swf", this.getManyDimensionsXmlData());
} /**
* 多维3D柱状图
*
* @return
*/
public FChart drawColumn3DGroup() {
return this.getDrawChart("MSColumn3D.swf", this
.getManyDimensionsXmlData());
} /**
* 多维3D曲线图
*
* @return
*/
public FChart drawLine3DGroup() {
return this.getDrawChart("MSLine.swf", this.getManyDimensionsXmlData());
} // ==========get/set方法begin============== public String getCaption() {
return caption;
} public void setCaption(String caption) {
this.caption = caption;
} public String getXAxisName() {
return xAxisName;
} public void setXAxisName(String axisName) {
xAxisName = axisName;
} public String getYAxisName() {
return yAxisName;
} public void setYAxisName(String axisName) {
yAxisName = axisName;
} public String getWidth() {
return width;
} public void setWidth(String width) {
this.width = width;
} public String getHeight() {
return height;
} public void setHeight(String height) {
this.height = height;
} public String getJsPath() {
return jsPath;
} public void setJsPath(String jsPath) {
this.jsPath = jsPath;
} public String getSwfPath() {
return swfPath;
} public void setSwfPath(String swfPath) {
this.swfPath = swfPath;
} public String getDivId() {
return divId;
} public void setDivId(String divId) {
this.divId = divId;
} public String[] getColors() {
return colors;
} public void setColors(String[] colors) {
this.colors = colors;
} public String getMyChartName() {
return myChartName;
} public void setMyChartName(String myChartName) {
this.myChartName = myChartName;
} public List<Map<Object, Object>> getOneDimensionsList() {
return oneDimensionsList;
} public void setOneDimensionsList(List<Map<Object, Object>> oneDimensionsList) {
this.oneDimensionsList = oneDimensionsList;
} public Map<Object, Map<Object, Object>> getManyDimensionsMap() {
return manyDimensionsMap;
} public void setManyDimensionsMap(
Map<Object, Map<Object, Object>> manyDimensionsMap) {
this.manyDimensionsMap = manyDimensionsMap;
} public List<String> getXAxisNameList() {
return xAxisNameList;
} public void setXAxisNameList(List<String> axisNameList) {
xAxisNameList = axisNameList;
} public boolean isBenchmark() {
return benchmark;
} public void setBenchmark(boolean benchmark) {
this.benchmark = benchmark;
} public String getBenchmarkName() {
return benchmarkName;
} public void setBenchmarkName(String benchmarkName) {
this.benchmarkName = benchmarkName;
} public Object getBenchmarkValue() {
return benchmarkValue;
} public void setBenchmarkValue(Object benchmarkValue) {
this.benchmarkValue = benchmarkValue;
} public Integer getChartType() {
return chartType;
} public void setChartType(Integer chartType) {
this.chartType = chartType;
} public Integer getChartShowType() {
return chartShowType;
} public void setChartShowType(Integer chartShowType) {
this.chartShowType = chartShowType;
} public Integer getChartWeiType() {
return chartWeiType;
} public void setChartWeiType(Integer chartWeiType) {
this.chartWeiType = chartWeiType;
} public String[] getGroupColumn() {
return groupColumn;
} public void setGroupColumn(String[] groupColumn) {
this.groupColumn = groupColumn;
} public String[] getGroupName() {
return groupName;
} public void setGroupName(String[] groupName) {
this.groupName = groupName;
} public String getNumberPrefix() {
return numberPrefix;
} public void setNumberPrefix(String numberPrefix) {
this.numberPrefix = numberPrefix;
} public String getNumberSuffix() {
return numberSuffix;
} public void setNumberSuffix(String numberSuffix) {
this.numberSuffix = numberSuffix;
} public String getChartRightMargin() {
return chartRightMargin;
} public void setChartRightMargin(String chartRightMargin) {
this.chartRightMargin = chartRightMargin;
} // ------------------------------------------------------
/**
* 获取十六进制的颜色代码.比如 "#6E36B4" , For HTML ,
*
* @return String
*/
public static String getRandColorCode() {
String r, g, b;
Random random = new Random();
r = Integer.toHexString(random.nextInt(256)).toUpperCase();
g = Integer.toHexString(random.nextInt(256)).toUpperCase();
b = Integer.toHexString(random.nextInt(256)).toUpperCase(); r = r.length() == 1 ? "0" + r : r;
g = g.length() == 1 ? "0" + g : g;
b = b.length() == 1 ? "0" + b : b; return r + g + b;
} /**
* 依据图形配置信息和DataTable生成图形字符串
* @param fc
* @param dt
* @return
* @throws Exception
*/
public FChart GetChartStr(FushionChart fc,DataTable dt) throws Exception{
FChart strs = null;
if(fc.chartWeiType==2){
List<Map<Object, Object>> oneDimensionsList = new ArrayList<Map<Object, Object>>();
Map<Object, Object> map = new HashMap<Object, Object>();
for(int i=0;i<dt.GetRowsCount();i++){
map.put("x", dt.GetString(i, "x"));
map.put("y", dt.GetString(i, "y"));
oneDimensionsList.add(map);
}
fc.setOneDimensionsList(oneDimensionsList);
}else if(fc.chartWeiType==3){
for(int i=0;i<dt.GetRowsCount();i++){
xAxisNameList.add(dt.GetString(i, "x"));
}
for (int i = 0; i < groupColumn.length; i++) {
Map<Object, Object> m = new HashMap<Object, Object>();
for (int j = 0; j < xAxisNameList.size(); j++) {
for(int c=0;c<dt.GetRowsCount();c++){
if(xAxisNameList.get(j).equals(dt.GetString(c, "x"))){
m.put(xAxisNameList.get(j), dt.GetString(c, groupColumn[i]));
}
} }
manyDimensionsMap.put(groupName[i], m);
}
fc.setManyDimensionsMap(manyDimensionsMap); }
switch(fc.getChartType()){
case 1:{ //柱状图
if(fc.chartShowType==2){
if(fc.chartWeiType==3){
strs=fc.drawColumn2DGroup();
}else{
strs=fc.drawColumn2D();
}
}else if(fc.chartShowType==3){
if(fc.chartWeiType==3){
strs=fc.drawColumn3DGroup();
}else{
strs=fc.drawColumn3D();
}
}
break;
}
case 2:{ //曲线图
if(fc.chartShowType==2){
if(fc.chartWeiType==3){
strs=fc.drawLine2DGroup();
}else{
strs=fc.drawLine2D();
}
}else if(fc.chartShowType==3){
if(fc.chartWeiType==3){
strs=fc.drawLine3DGroup();
}else{
strs=fc.drawLine3D();
}
}
break;
}
case 3:{ //饼图
if(fc.chartShowType==2){
strs=fc.drawPie2D();
}else if(fc.chartShowType==3){
strs=fc.drawPie3D();
}
break;
}
}
return strs;
} }

3.Servlet代码

package project.report.servlet;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random; import hh.com.carrier.DataTable;
import hh.com.dao.DBUtil;
import hh.com.environment.AbstractWebImpl;
import hh.com.exception.CustomException;
import hh.com.exception.DAOException;
import hh.com.exception.DomainControllerException;
import hh.com.exception.WebImplException;
import hh.com.fushionchart.FushionChart;
import hh.sys.constant.EventId; public class ReportServlet extends AbstractWebImpl{
public void doEvent(int eventId) throws WebImplException,
DomainControllerException { try{
switch(eventId){
case EventId.MM_EXPAND1:{//
List<Map<Object, Object>> oneDimensionsList = new ArrayList<Map<Object, Object>>();
List<String> xAxisNameList = new ArrayList<String>();
Map<Object, Map<Object, Object>> manyDimensionsMap = new HashMap<Object, Map<Object, Object>>(); // 以下代码(三个for循环)是做測试用的
for (int i = 0; i < 10; i++) {
int value = (new Random()).nextInt(100);
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("x", "你好" + i);
map.put("y", value);
oneDimensionsList.add(map);
}
for (int i = 1; i <= 12; i++) {
xAxisNameList.add(i + "");
}
for (int i = 0; i < 3; i++) {
Map<Object, Object> m = new HashMap<Object, Object>();
for (int j = 1; j <= xAxisNameList.size(); j++) {
m.put(xAxisNameList.get(j - 1), (new Random())
.nextInt(100));
}
manyDimensionsMap.put("201" + i, m);
} FushionChart d = new FushionChart();
d.setCaption("查询包数统计分析图");
d.setXAxisName("指标发生时间");
d.setYAxisName("測试");
d.setWidth("1000");
d.setHeight("500");
d.setChartType(1);
d.setChartShowType(2);
d.setChartWeiType(3);
// d.setXAxisNameList(xAxisNameList);
System.out.println(manyDimensionsMap.size());
// d.setManyDimensionsMap(manyDimensionsMap);
//d.setOneDimensionsList(oneDimensionsList);
//String str1 = d.drawColumn2D();
DataTable dt=new DataTable();
/*dt.AddColumn("x");
dt.AddColumn("y");
dt.AddRow(1); dt.SetCellData("一月",0, "x");
dt.SetCellData("10",0, "y");
dt.AddRow(1);
dt.SetCellData("二月",1, "x");
dt.SetCellData("20",1, "y");*/
String[] groupColumn={"cpudeg","ramsize"};
String[] groupName={"CPU","内存"};
d.setGroupColumn(groupColumn);
d.setGroupName(groupName);
dt=new DBUtil().GetData("select max(cpudeg) cpudeg,max(ramsize) ramsize,createtime x from tsr_csreal group by date_format(createtime,'%Y-%m-%d')");
/*String str1= d.GetChartStr(d, dt);
// 这里假设想要真实数据。能够自己写,仅仅要你写好的数据封装成list或者map的格式就能够。然后把參数传到DrawDesigns这里类里就能够。 // 我这里没有数据,由于在DrawDesigns类里面我用的是假数据。在verifyParams()这种方法里的最以下就是我写的假数据。被我凝视掉了。能够依据自己的需求随便写
System.out.println("打印出xml数据:" + str1);
request.setAttribute("draw0", str1);*/
break;
} default:{
break;
}
}
/*}catch(CustomException ex){ //捕捉自己定义异常。抛出错误消息
request.setAttribute("Res", ex.getMessage());
}catch (DAOException ex) { //捕捉DAO层异常,插入数据库错误信息
ex.printStackTrace(request);
*/}catch (Exception ex) { //捕捉service异常,插入数据库错误信息
ex.printStackTrace();
throw new WebImplException(request,ex);
}
}
}



4.前台jsp页面调用报表插件

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="hh.sys.constant.SysMessage,hh.sys.constant.EventId"%>
<%@ page isELIgnored="false"%>
<%@page import="hh.com.fushionchart.Model.FChart"%>
<html>
<head>
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
DataTable dt=(DataTable)request.getAttribute("dt");
String serverType=(String)request.getParameter("serverType");
FChart fChart=(FChart)request.getAttribute("fChart");
int cpudeg=0,discdeg=0,boarddeg=0,cpupct=0;
if(dt!=null && dt.GetRowsCount()>0){
cpudeg=dt.GetInteger(0,"cpudeg");
discdeg=dt.GetInteger(0,"discdeg");
boarddeg=dt.GetInteger(0,"boarddeg");
cpupct=dt.GetInteger(0,"cpupct");
}
%>
<title>用户列表</title> <script id="othejs" import="1" type="text/javascript" src="../control/H2ResourcesForOthe.js" ></script>
<script id="gridjs" import="1" type="text/javascript" src="../control/H2ResourcesForGrid.js" ></script>
<script id="treejs" import="0" type="text/javascript" src="../control/H2ResourcesForTree.js" ></script>
<script id="datejs" import="1" type="text/javascript" src="../control/H2ResourcesForDate.js" ></script>
<script id="stextjs" import="1" type="text/javascript" src="../control/H2ResourcesForSText.js" ></script> <script id="stextjs" import="1" type="text/javascript" src="../control/H2ShowDG.js" ></script> <script type="text/javascript" src="../FusionCharts/JSClass/FusionCharts.js"></script>
<script type="text/javascript" src="../FusionCharts/JSClass/FusionChartsUtil.js"></script>
<link href="../css/global.css" rel="stylesheet" type="text/css"/>
<style type="text/css">
.tabtitle{
background: #f4f4f4;
height: 23px;
font-weight: bold;
}
.table td {
border-right: 1px solid #CCC;
border-bottom: 1px solid #d7d7d7;
}
.table .tdone{
background: #FFF;
height: 23px;
}
.table .tdtwo{
background: #f4f4f4;
height: 23px;
}
.table{
font-size: 13px;
}
</style>
</head>
<%@ include file="../../../importjsp/I_Message.jsp"%>
<body> <%@ include file="../../../importjsp/I_ProcessLayout.jsp" %>
<form name="theForm" method="post">
<input type="hidden" id="deptid" name="deptid" value="<%=request.getParameter("deptid") %>" />
<input name="issearch" type="hidden" value="${param.issearch}"><%--1:查询调用--%>
<table width="98%" height="100%" cellpadding="0" cellspacing="0"> <tr ><td >
<table class="TableList" width="100%" cellpadding="0" cellspacing="0" >
<tr>
<td >
<div class="searchwherediv"><!--
<span class="title">登录代码:</span>
<input type="text" class="searchtext" id="code" name="code" style="width: 200px;" />
--><span class="title">按类型:</span>
<select fix="1" class="searchtext" name="ctype" id="ctype" >
<option value="1">温度</option>
<option value="2">CPU百分比</option>
<option value="3">内存大小</option>
<option value="4">带宽</option>
</select> <span class="title">图形选择:</span>
<select fix="1" class="searchtext" name="charttype" id="charttype" > <option value="2">曲线图</option>
<option value="1">柱形图</option>
</select>
</div>
</td>
</tr>
<tr>
<td >
<div class="searchbuttondiv">
<input type="button" name="61005" onClick="onSubmitSearch()" accesskey="Q" title="查询(Alt+Q)" value="查询(Q)" onFocus="this.blur()" class="functionbutton" />
<input type="button" name="61006" onClick="onSubmitClear()" accesskey="R" title="重置(Alt+R)" value="重置(R)" onFocus="this.blur()" class="functionbutton" />
<!--<input type="button" name="61006" onClick="javascript:OpenImportExcel(ImportExcelCode.USER)" accesskey="I" title="导入用户(Alt+I)" value="导入用户(I)" onFocus="this.blur()" class="functionbutton" />
--></div>
</td>
</tr>
</table>
</td></tr> <!---页面按钮赋权開始 disabled -->
<%@ include file="../../../importjsp/I_ListCompetence.jsp" %>
<!---页面按钮赋权结束--> <!-- H2Grid 表格開始 -->
<tr>
<td height="100%" valign="top" >
<div style="width: 100%;height: 100%;">
<div id="mainDiv" class="mainDiv" style="width: 100%;height: 50%;" >
<div id="drawDiv" style="width: 75%;height: 100%;float: left;"></div>
<div style="width: 23%;height: 99%;float: right;text-align: left;border: 1px solid #CCC;">
<table style="width: 100%;" cellpadding="10">
<tr>
<td style="background-color: #f4f4f4;"><h4>电脑状态</h4></td>
</tr>
<tr>
<td>
<div>CPU温度 <%=cpudeg%>℃</div>
<div id="cpudeg" style="width:90%; height:20px; border:1px solid #c1cbc2; background:#f5ffec;margin-left: 0px;">
<div style="width:10%; height:20px; background:#7fd441;margin-left: 0px;"></div>
</div>
</td>
</tr>
<tr>
<td>
<div>硬盘温度 <%=discdeg%>℃</div>
<div id="discdeg" style="width:90%; height:20px; border:1px solid #c1cbc2; background:#f5ffec;margin-left: 0px;">
<div style="width:10%; height:20px; background:#7fd441;margin-left: 0px;"></div>
</div>
</td>
</tr>
<tr>
<td>
<div>主板温度 <%=boarddeg%>℃</div>
<div id="boarddeg" style="width:90%; height:20px; border:1px solid #c1cbc2; background:#f5ffec;margin-left: 0px;">
<div style="width:10%; height:20px; background:#7fd441;margin-left: 0px;"></div>
</div>
</td>
</tr> <tr>
<td>
<div>CPU占用百分比 <%=cpupct%>%</div>
<div id="cpupct" style="width:90%; height:20px; border:1px solid #c1cbc2; background:#f5ffec;margin-left: 0px;">
<div style="width:10%; height:20px; background:#7fd441;margin-left: 0px;"></div>
</div>
</td>
</tr>
</table>
</div>
</div>
<br/>
<div id="tableList" style="width: 100%;height: 45%;border: 1px solid #CCC;" >
<table width="100%" border="0" cellspacing="0" cellpadding="5" class="table" id='permission'>
<tr>
<td align="left" class="tabtitle">CPU温度(℃)</td>
<td align="left" class="tabtitle">硬盘温度(℃)</td>
<td align="left" class="tabtitle" >主板温度(℃)</td>
<td align="left" class="tabtitle" >风扇转速</td>
<td align="left" class="tabtitle" >CPU占用百分比(%)</td>
<td align="left" class="tabtitle" >内存占用大小(K)</td>
<td align="left" class="tabtitle" >带宽(KB)</td>
<td align="left" class="tabtitle" >时间</td>
</tr> <%
if(dt!=null && dt.GetRowsCount()>0){
for(int i=0;i<dt.GetRowsCount();i++){
String styleClass="tdtwo";
if(i%2==0){
styleClass="tdone";
}
%>
<tr>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"cpudeg") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"discdeg") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"boarddeg") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"fandeg") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"cpupct") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"ramsize") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"bandwidth") %></td>
<td align="left" class="<%=styleClass %>"><%=dt.GetString(i,"x") %></td>
</tr>
<%}
}
%>
</table>
</div>
</div>
</td>
</tr>
<!-- H2Grid 表格结束 -->
</table>
</form>
</body>
</html>
<%@ include file="../../../importjsp/I_ResetListValue.jsp" %>
<script type="text/javascript" src="../js/events.js" language="javascript"></script>
<script type="text/javascript" src="../js/utils.js" language="javascript"></script>
<script type="text/javascript" src="../js/check.js" language="javascript"></script>
<script language="javascript" type="text/javascript" src="../control/LoadControl.js"></script>
<script language="javascript" type="text/javascript" src="../js/plugins/custom/customplugin.js"></script>
<script language="javascript" type="text/javascript" >
var grid,id;
grid = new H2Grid({
pkColumn : 'userid',
captions : '登陆代码,username称,所属部门,手机号码,Email,标识,创建者,创建时间,改动者,改动时间',
colnames : 'code,name,deptname,mobileno,email,isenabled,creator,createtime,modifier,modifytime',
widths : '80,80,80,80,80,80,80,150,80,150',
aligns : 'left,left,left,left,left,left,left,left,left,left',
page : true
}); //查询
function onSubmitSearch(){
var url = "../servlet/showpage?eventID=62002&&project_res=sm.real.cserver.report&&serverType=<%=serverType%>";
SubmitForm(url);
}
//加入
function onSubmitAdd(){
var deptid=theForm.deptid.value;
if(deptid==undefined||deptid=="null"){
Alert("请先选择组织机构!");
return ;
}
var url="servlet/showpage? eventID=<%=EventId.MM_EXPAND3%>&&project_res=org.list.table.edit&&deptid="+theForm.deptid.value;
window.top.openWin("用户——加入",url,650,590);
} //改动
function onSubmitEdit(){
id=grid.getSelectRowPKID();
if(id==""||id==undefined){
Alert("请选择要编辑的数据!");
return;
};
var url = "servlet/showpage? eventID=<%=EventId.MM_EXPAND2%>&&project_res=org.list.table.edit";
url += "&&id="+id;
window.top.openWin('用户——编辑 ',url,650,590);
}
//删除
function onSubmitDelete(){
id=grid.getSelectRowPKID();
if(id==""||id==undefined){
Alert("请选择要删除的数据");
return;
};
window.top.Confirm("确认删除?","",
function(){ SubmitForm("../servlet/showpage?eventID=<%=EventId.MM_EXPAND4%>&&project_res=org.list.table&&id="+id+"&&deptid="+theForm.deptid.value);},
function(){ });
}
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',60000); //指定1秒刷新一次
fakeProgress(<%=cpudeg%>, cpudeg,100);
fakeProgress(<%=discdeg%>, discdeg,100);
fakeProgress(<%=boarddeg%>, boarddeg,100);
fakeProgress(<%=cpupct%>, cpupct,100); //载入报表数据 ReportData('drawDiv',"<%=fChart.getXmlData() %>",'<%=fChart.getFileName() %>');
</script>

以上就是FushionCharts报表的用例。

不懂的能够博客留言我。

Java封装FushionCharts的更多相关文章

  1. 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)

    本文针对的问题是 ICTCLAS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLAS2015的传送门(http://ictclas. ...

  2. java封装的方法

    java封装是由Java是面向对象程序设计语言的性质决定的,面向对象程序设计语言的三大特性之一就是封装.封装其实就是包装的意思,从专业的角度来看,就是把对象的所有组成部分组合在一起,保护私有属性. 如 ...

  3. Java - 24 Java 封装

    Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外 ...

  4. Echarts 的 Java 封装类库 转自 https://my.oschina.net/flags/blog/316920

    转自: https://my.oschina.net/flags/blog/316920 Echarts 的 Java 封装类库:http://www.oschina.net/p/echarts-ja ...

  5. Java-Runoob-面向对象:Java 封装

    ylbtech-Java-Runoob-面向对象:Java 封装 1.返回顶部 1. Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细 ...

  6. java封装的优点

    在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机 ...

  7. 乐字节Java|封装JavaBean、继承与权限修饰

    本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...

  8. Java 封装 继承 多态

    Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...

  9. Java“封装”的例子

    /*功能:Java"封装"的典型例子*/ public class Demo3_5{    public static void main(String args[]){      ...

随机推荐

  1. supervisord 使用记录

    #supervisor简介 Supervisor是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程. #组成部分 supervisord(s ...

  2. Asp.net MVC4 Step by Step (2)-参数数据的传递

    首先创建一个表单,不同于WebForm,框架提供了一系列HMTL帮助方法来生成HTML标签. 下面创建一个Create.cshtml为文件名的视图. <h2> Create Auction ...

  3. Android中Button四种点击事件实现方式

    1.Xml添加监听属性,这里添加的doClick. <Button android:id="@+id/bt1" android:layout_width="wrap ...

  4. Windows Live Writer 历史Blog修改的功能

    其实 WLW 有历史Blog修改的功能,我只是一直没有找到,就在打开“最近发布的日志”里面, 位于屏幕的右侧“打开”列表下. 最近发现记忆力越来越差了,BLOG看来是必须的了.

  5. 卸载pycharm再重新安装后,找不到第三方库

    遇到的问题: 看到pycharm出了新的版本,手痒把旧的版本卸载,然后安装了最新的版本,然后问题就来了. 之前通过PIP命令安装的第三方库,import的时候都报错,找不到模块.既然以前能正常使用,现 ...

  6. 【转载】Servlet中的request与response

      一.HttpServletRequest概述   1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...

  7. Django 框架入门

    1.创建虚拟环境.(如果你想在你的服务器中运行多个项目,那么装虚拟环境是最好的选择) pip install virtualenv pip install virtualenvwrapper 安装好后 ...

  8. PAT_A1072#Gas Station

    Source: PAT A1072 Gas Station (30 分) Description: A gas station has to be built at such a location t ...

  9. 整理Crontab 定时计划

    一. 什么是crontab? crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和 ...

  10. Codeforces Round #548 (Div. 2) B. Chocolates

    You went to the store, selling