`
fengfeng925
  • 浏览: 107107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用fusioncharts实现数据库的动态数据交互

阅读更多
   线简单介绍一下FusionCharts,这是一款动态的制作报表的工具,主要通过XML数据和SWF文件进行交互,实现类似于flash的非常漂亮的报表。下面就做一个Demo,简要介绍一下啊fusioncharts的功能,以及如何实现一个完整动态数据的交互。
   首先下载FusionCharts的官方API发布包,我做这个例子的时候是V3.1下载后,在MyEclipse下新建一个Web工程。然后将发布包中的Charts文件夹拷贝到WebRoot下,这里面都是我们接下来要做图的时候用到的一些swf文件。接着还需要一个JS文件,是JSClass文件夹下的FusionCharts.js文件,将它拷贝到WebRoot下的ChartsJs文件夹下。由于我这个项目是结合struts1还有spring加上JPA做的。所以大家先有个基本的认识。然后在WEB-INF下建立两个目录,一个叫fusion、一个叫common,等会我们会用到。找到发布包的\Code\JSP\Includes目录下,将FusionCharts.jsp文件拷贝到common文件夹下。
   准备环境完成了,那么我们下面就开始做了。
   首先说我想做什么内容。主要是展示2004、2005、2006、2007四年的一个油品的销售统计,用柱状图来表示,然后点击每一个柱子,会在右边显示出饼状的上半年的各个月份的销售比例。
   首先建立实体Bean,代码如下
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.zxyg.bean.orgnization.Employee;

/**
 * 年销售统计
 * @author Lan
 * 
 */
@Entity
@Table(name = "t_yearunits")
public class YearUnits {
	private Integer id;
	private String year;
	private Float units;
	
	private Set<MonthUnits> months = new HashSet<MonthUnits>();

	@OneToMany(mappedBy="year", cascade=CascadeType.REFRESH)
	public Set<MonthUnits> getMonths() {
		return months;
	}

	public void setMonths(Set<MonthUnits> months) {
		this.months = months;
	}

	@Id @GeneratedValue
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(length=4, nullable=false)
	public String getYear() {
		return year;
	}

	public void setYear(String year) {
		this.year = year;
	}

	@Column(length=5, nullable=false)
	public Float getUnits() {
		return units;
	}

	public void setUnits(Float units) {
		this.units = units;
	}

	
}


import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * 月销售统计
 * @author Lan
 * 
 */
@Entity
@Table(name = "t_monthunits")
public class MonthUnits {
	private Integer id;
	private String month;
	private Float units;
	
	private YearUnits year;

	@ManyToOne(cascade=CascadeType.REFRESH)
	@JoinColumn(name="year_id")
	public YearUnits getYear() {
		return year;
	}

	public void setYear(YearUnits year) {
		this.year = year;
	}

	@Id @GeneratedValue
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(length=4, nullable=false)
	public String getMonth() {
		return month;
	}

	public void setMonth(String month) {
		this.month = month;
	}

	@Column(length=5, nullable=false)
	public Float getUnits() {
		return units;
	}

	public void setUnits(Float units) {
		this.units = units;
	}
}


这分别是年销售统计和月销售统计的实体Bean
由于Service层的东西都在底层封装好了,所以建立好表后,手动添加一些数据就好了。
接下来是Action层的代码,首先是针对年销售突击的Action的代码
import java.io.PrintWriter;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.stereotype.Controller;

import com.zxyg.bean.report.MonthUnits;
import com.zxyg.bean.report.YearUnits;
import com.zxyg.service.report.MonthUnitsService;
import com.zxyg.service.report.YearUnitsService;

/**
 * 年销售统计图表
 * @author Lan
 *
 */
@Controller("/year/units/report")
public class YearUnitsAction extends Action {
	@Resource private YearUnitsService yearUnitsService;
	
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//年销售统计
		StringBuilder strXML1 = new StringBuilder("");
		strXML1.append("<?xml version='1.0' encoding='GBK'?><chart palette='2' maxColWidth='70' rotateYAxisName='0' caption='油品年销售统计' "
				 + "startingAngle='125' shownames='1' showvalues='0' numberPrefix='$'>");
		
		List<YearUnits> yearunits = yearUnitsService.getScrollData().getResultlist();
		for(YearUnits units : yearunits) {
			strXML1.append("<set label='" + units.getYear() + "' value='" + units.getUnits()+ "'link='JavaScript:myJS(" + units.getYear().substring(0, 4) + ")'/>");
		}
		strXML1.append("</chart>");
		request.setAttribute("strXML1", strXML1.toString());
		return mapping.findForward("report");
	}
	
}


这里的钻取要用到ajax技术,所以接下来是月销售统计的数据钻取
import java.io.PrintWriter;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Controller;

import com.zxyg.bean.report.MonthUnits;
import com.zxyg.service.report.MonthUnitsService;

/**
 * 月销售统计图表
 * @author Lan
 *
 */
@Controller("/month/units/report")
public class MonthUnitsAction extends Action {
	@Resource private MonthUnitsService monthUnitsService;

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		response.setContentType("text/html;charset=utf-8");
		response.setHeader("Cache-Control", "no-cache");
		PrintWriter out = response.getWriter();
		String year = request.getParameter("year");
		if(year != null && !"".equals(year)) {
			out.print("<chart palette='2' rotateYAxisName='0' caption='上半年销售历史' xAxisName='月份' refreshInterval='60'" 
				          +" yAxisName='Units' showValues='0'>");
			List<MonthUnits> monthunits = monthUnitsService.getMonthUnitsByYear(year.trim());
			for(int i=0; i<monthunits.size(); i++) {
				MonthUnits monthUnits = monthunits.get(i);
				out.print("<set label='" + monthUnits.getMonth()+ "' value='" + monthUnits.getUnits()+ "' />");
			}
			out.print("</chart>");
		}
		return null;
	}
}

最后是页面的代码,struts1的配置我就不写了,反正是定向到WEB-INF下的fusion下的
year_units_report.jsp下
页面代码如下
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/page/share/taglib.jsp" %>
<%@ include file="/WEB-INF/page/share/FusionCharts.jsp" %>
<html>
<head>
<title>报表显示</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/css/vip.css" type="text/css">
<script language="JavaScript" src="/ChartsJs/FusionCharts.js"></script>
<script LANGUAGE="JavaScript">
	var xmlHttpRequest;
    function myJS(myVar) {
    	initRequest(myVar);
    }
    
    //初始化xmlHttpRequest对象
    function initRequest(myVar) {
    	if(window.XMLHttpRequest) {
			try {
				xmlHttpRequest = new XMLHttpRequest();
				if(xmlHttpRequest.overrideMimeType) {
					xmlHttpRequest.overrideMimeType("text/html;charset=UTF-8");
				}
			}catch (e) {}
		}else if(window.ActiveXObject) {
			try {
				xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				try {
					xmlHttpRequest = new ActiveXObject("Msxml2.XMLHttp");
				} catch (e) {
					try {
						xmlHttpRequest = new ActiveXObject("Msxml3.XMLHttp");
					} catch (e) {}
				}
			}
		}
    	verify(myVar);
    }
    
    //准备传输数据
    function verify(myVar) {
    	var url = "/month/units/report.do";
    	xmlHttpRequest.onreadystatechange = callback;
    	xmlHttpRequest.open("POST", url, true);
    	xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    	xmlHttpRequest.send("year=" + myVar);
    	//xmlHttpRequest.send(null);
    }
    
    //定义回调函数
    function callback() {
    	if(xmlHttpRequest.readyState == 4) {
    		if(xmlHttpRequest.status == 200) {
    			var responseText = xmlHttpRequest.responseText;
    			createHTML3D(responseText);
    		}
    	}
    }
    
    //创建子数据图
    function createHTML3D(data) {
    	var myChart = new FusionCharts("/Charts/Pie3D.swf", "myChartId", "500", "300", "0", "0");
    	myChart.setDataXML(data);
    	myChart.render("chartdiv");
    }
</script>
</head>



<body bgcolor="#FFFFFF" text="#000000" marginwidth="0" marginheight="0">
		<%	               
	    	String strXML1 = (String)request.getAttribute("strXML1");
	    	if(strXML1 != null && !"".equals(strXML1)) {
	    		String chartHTML1 = createChartHTML("/Charts/Column3D.swf", 
	 				"", strXML1, "YearUnits", 500, 300, false);
	 	%>
	 		<span>
	   			<%=chartHTML1%>
	   		</span>
	 	<% 
	    	}
	 	%>
	 	
	 	<span id="chartdiv">
	 	</span>
</body>
</html>

最后图的效果如下


这样就做到了动态数据交互钻取,页面不刷新。达到了预期的效果。
  • 大小: 22.8 KB
分享到:
评论
5 楼 jeffsc 2013-10-29  
这种创建实体类的方式明显不科学。
4 楼 JTTC 2013-01-07  
Fusioncharts的确漂亮,顶起。
2 楼 labchy 2010-09-13  
楼主分享的精神誓死捍卫
但是对这篇文章不敢恭维
建议看看demo吧
1 楼 hellostory 2010-08-18  
楼主做得不错!不过这样设计太特殊,不能复用!最好还是能将FusionCharts的操作封装起来

相关推荐

    使用fusioncharts实现数据库的动态数据交互.zip

    标题中的“使用FusionCharts实现数据库的动态数据交互”指的是使用FusionCharts这款JavaScript图表库与数据库进行数据通信,以实现在网页上展示动态、实时的图表数据。FusionCharts是一款强大的图表解决方案,它提供...

    利用FusionCharts 实现数据图表展示

    FusionCharts是一款强大的JavaScript图表库,它允许开发者创建交互式且富有视觉吸引力的数据可视化图表。在Web应用中,数据图表的展示是传达信息、分析数据和做出决策的关键工具。FusionCharts支持多种图表类型,...

    FusionCharts数据库实例

    这个FusionCharts数据库实例展示了如何利用SpringMVC、数据库和Velocity模板引擎实现动态的图表统计。通过这种方式,你可以根据实际的数据库数据实时更新图表,提供交互式的数据分析体验。这个实例对于需要数据可视...

    fusionCharts数据库取数展示

    本文介绍了如何使用FusionCharts来实现动态数据交互的过程。通过定义实体Bean、获取数据库中的数据、构建XML数据格式以及配置FusionCharts组件,最终实现了动态图表的生成与展示。这种方式不仅提高了数据展示的灵活...

    C#网站里面使用fusionCharts显示统计数据表格

    本示例将深入探讨如何在ASP.NET环境中利用FusionCharts显示统计数据表格,同时结合数据库来动态生成XML数据。 首先,理解FusionCharts的工作原理至关重要。FusionCharts是一个JavaScript图表库,它依赖于服务器端...

    FusionCharts Free开发文档

    FusionCharts使用XML作为数据接口,提供了两种形式的XML数据接口:直接以XML文件提供数据和基于数据库提供数据。FusionCharts也提供了详细的XML schema,方便开发者快速了解XML数据接口。 七、FCF和组图XML ...

    FusionCharts

    4. **数据源支持**:FusionCharts支持多种数据源,包括XML、JSON、CSV、数据库等,方便从各种数据存储系统获取数据。它还支持动态数据加载,使得数据更新实时化,提高了报表的时效性。 5. **模板与主题**:...

    Asp.net FusionCharts 示范代码演示

    **Asp.net FusionCharts 示例代码演示** 在Web开发领域,Asp.net与FusionCharts的结合...这将有助于提升开发者在数据可视化方面的技能,使他们能够在项目中更加灵活地使用FusionCharts和Asp.net进行交互式图表的开发。

    FusionCharts统计swf 完整版

    1. **FusionCharts介绍**:FusionCharts是一个JavaScript图表库,它允许开发者用XML或JSON格式的数据创建动态、交互式的图表。它的核心优势在于其丰富的图表类型,包括柱状图、饼图、线图、面积图、散点图等,覆盖了...

    ASP.NET与FusionCharts结合实现VB页面Flash柱状图的数据可视化

    使用场景及目标:① 在 Web 项目中实现基于实时或历史数据库的数据展示;② 提升数据展示的效果,使数据分析和业务决策更为简便高效。 其他说明:本案例采用的是 FusionCharts 这一第三方图表库来完成图形化展示的...

    FusionCharts 使用文档

    FusionCharts 是一款强大的基于Flash的图表组件,它能够生成交互式、动态的数据驱动图表,适用于各种网页脚本语言,如HTML、JSP等。这款工具利用Flash的美观界面和XML作为数据接口,创建出紧凑、交互性强的图表,为...

    FusionCharts_ASP_Class

    FusionCharts是一款强大的数据可视化工具,它使用Flash技术来创建交互式的图表和图形。在ASP(Active Server Pages)环境中,为了方便开发者集成FusionCharts,FusionCharts公司提供了专门的ASP类库,即...

    FusionCharts 甘特图制作案例

    在这个"FusionCharts 甘特图制作案例"中,我们将会探讨如何使用FusionCharts来创建甘特图,包括从XML文件直接读取数据和从数据库获取数据的方法。 首先,让我们深入了解FusionCharts甘特图的核心概念。甘特图通常由...

    fusionCharts是如何在网页呈现图表

    数据可以静态编写,也可以通过服务器端脚本动态生成,如连接到数据库或实时数据源。例如,在示例中,使用了一个预先编写的XML文件来提供图表数据。 3. **JavaScript类文件**: FusionCharts的JavaScript类文件...

    springmvc+mybatis+fusionchart实现实时动态数据更新报表

    5. **服务层开发**:创建Service层,实现数据的获取和更新逻辑,调用MyBatis的Mapper接口与数据库交互。 6. **前端界面**:使用HTML、CSS和JavaScript创建用户界面,集成FusionCharts库,设置图表类型、数据源和...

    Fusioncharts 报表

    FusionCharts是一款强大的数据可视化工具,专用于创建交互式的图表和报表。这款JavaScript库提供了丰富的图表类型,使得开发者能够轻松地将复杂的数据转化为易于理解的图形。以下是对FusionCharts报表开发的一些关键...

    FusionCharts 文档和实例

    9. **FusionCharts、DBExample、DB_JS、ArrayExample**:这些都是可能的子目录或文件,分别对应FusionCharts的基本示例、数据库连接示例、JavaScript处理数据库数据的示例以及数组数据应用到图表的示例。 10. **...

    springmvc例子,FusionCharts例子(前台 java_FusionCharts后台)

    在这个例子中,我们将深入探讨如何在Spring MVC项目中集成并使用FusionCharts来展示从后台数据库获取的数据。 首先,让我们理解Spring MVC的基本工作流程。Spring MVC通过DispatcherServlet接收HTTP请求,然后将...

    FusionCharts图表开发(xml数据源)

    在IT行业中,FusionCharts是一款广泛使用的交互式图表库,它能够帮助开发者创建各种美观、动态的数据可视化效果。本文将详细探讨使用FusionCharts进行图表开发时,如何通过XML数据源来实现数据的加载和展示。 首先...

Global site tag (gtag.js) - Google Analytics