使用open flash chart制作报表

拈花ヽ惹草 提交于 2019-12-03 18:53:14

 http://sarin.iteye.com/blog/685354这篇文章对open flash chart与struts2的整合使用做了详细的介绍,但是按照文章里面的内容进行实际操作的时候,却报了open flash char io error Loading test data Error #2032 的错,经过分析,原因我忘记了引入jofc2其所依赖的xstream包......在这里,需要注意的是这两个JAR包版本号的问题,我使用的是jofc2-1.0-0.jar和xstream-1.3.1.jar。

               项目按照Struts2的开发标准搭建,然后把OFC开发所需的flash文件,页面显示Flash的支持文件swfobject.js放到发布目录的相应位置,再将jofc2和其依赖的xstream的jar包放到WEB-INF/lib下并加入编译路径即可。 

    需求还是按照那篇博客文章中写的那样:记录系统访问用户所使用的浏览器并用图表显示。那么需要在数据库中记录这样的信息,如图所示: 

 

1----    首先是Action的定义,代码如下:

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import jofc2.model.Chart;
import jofc2.model.axis.Label;
import jofc2.model.axis.XAxis;
import jofc2.model.axis.YAxis;
import jofc2.model.elements.BarChart;
import jofc2.model.elements.LineChart;

/**   
 * 
 * @Project gun
 * @Package action.chart
 * @Class TestAction
 */
public class TestAction extends ActionSupport{
	private Chart ofcChart;  
    public Chart getOfcChart() {  
        return ofcChart;  
    }  
    public String showChart() throws Exception{  
        //y轴数据集合-使用数量  
        List<Number> dataSet = new ArrayList<Number>();  
        for(int i=1; i<=12;i++) {
        	dataSet.add((Integer)i);
        }
        //x轴数据集合-浏览器类型  
        List<Label> xLabel = new ArrayList<Label>();  
        //获取需要显示的数据集  
        List browserList = new TestDAO().get();  
        for (int i = 0; i < browserList.size(); i++) {  
            Test map = (Test) browserList.get(i);  
            //填充x轴  
            dataSet.add((Integer) map.getStatCount());  
            //填充y轴  
            xLabel.add(new Label((String) map.getStatVar()));  
        }  
        //设置X轴内容  
        XAxis labels = new XAxis();  
        labels.addLabels(xLabel);  
        //设置Y轴显示值域:Range的三个参数含义为:坐标最小值,最大值和步进值  
        YAxis range = new YAxis();  
        range.setRange(0, 200, 10);  
        //OFC折线图设置  
//      LineChart lineChart = new LineChart(LineChart.Style.NORMAL);
        //柱状图
        BarChart lineChart=new BarChart(BarChart.Style.GLASS); 
        lineChart.addValues(dataSet);  
        lineChart.setColour("#6666FF");  
        lineChart.setText("使用者数量");  
        //图表设置  
        ofcChart = new Chart("用户浏览器使用量分布");  
        ofcChart.setXAxis(labels);  
        ofcChart.setYAxis(range);  
        ofcChart.addElements(lineChart);  
  
        return SUCCESS;  
    }  

}

  2  DAO类,从数据库中获取数据,另外还定义了一个Bean类Test

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.gun.base.db.DBConnection;

/**
 * 从数据库中取得所需的数据
 * 
 * @Project gun
 * @Package action.chart
 * @Class TestDAO
 */
public class TestDAO {

	public List get() throws Exception {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		String querySQL = "select statCount, statVar from test where statType='broeser'";
		List list = new ArrayList();
		try {
			conn = DBConnection.getConnection();
			stmt = conn.prepareStatement(querySQL);
			rs = stmt.executeQuery();
			System.out.println("OK");
			while (rs.next()) {
				Test test = new Test();
				test.setStatCount(rs.getInt("statCount"));
				test.setStatVar(rs.getString("statVar"));
				list.add(test);
			}
			return list;
		} catch (SQLException e) {
			throw new Exception("根据主键查询信息失败,错误信息:" + e.toString());
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (stmt != null)
					stmt.close();
				if (conn != null)
					DBConnection.releaseConnection(conn);
			} catch (SQLException e) {
				throw new Exception("关闭数据库失败,错误信息:" + e.toString());
			}
		}
	}
}

/**
 * 请在此处填写类的描述
 * 
 * @Project gun
 * @Package action.chart
 * @Class Test
 */
public class Test {
	private String statVar;

	private int statCount;

	public String getStatVar() {
		return statVar;
	}

	public void setStatVar(String statVar) {
		this.statVar = statVar;
	}

	public int getStatCount() {
		return statCount;
	}

	public void setStatCount(int statCount) {
		this.statCount = statCount;
	}

}

3    最后定义了TestResult类,继承于StrutsResultSupport,用于生成json格式的数据。

import jofc2.model.Chart;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import com.opensymphony.xwork2.ActionInvocation;

public class TestResult extends StrutsResultSupport {
	private static final String ENCODING = "GBK";

	private static final long serialVersionUID = 4702848904993212381L;

	@Override
	protected void doExecute(String arg0, ActionInvocation inv)
			throws Exception {
		Chart chart = (Chart) inv.getStack().findValue("ofcChart");
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("application/json-rpc;charset=" + ENCODING);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Expires", "0");
		response.setHeader("Pragma", "No-cache");
		String json = chart.toString();
		System.out.println(json.toString());
		response.setContentLength(json.getBytes(ENCODING).length);
		PrintWriter out = response.getWriter();
		out.print(json);
		out.flush();
		out.close();
	}
}

4  现在需要在struts.xml配置文件中配置Action,如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="gun" extends="json-default">

		<result-types>
			<result-type name="ofc" class="action.chart.TestResult" />
		</result-types>

		<action name="test" class="action.chart.TestAction" method="showChart">
			<result type="ofc" name="success">
			</result>
		</action>

	</package>
</struts>

5   JSP页面很简单,只需要写一些简单的JS代码即可:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'cbar.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<script type="text/javascript" src="openflashchart/js/swfobject.js"></script>
<script type="text/javascript">  
    var flashvars = {"data-file":"test.action"};  
    var params = {menu: "false",scale: "noScale",wmode:"opaque"};  
    swfobject.embedSWF("openflashchart/open-flash-chart.swf", "my_chart", "900", "500", "9.0.0",  
    "expressInstall.swf",flashvars,params);  
</script>
</head>

<body>
	<table align="center">
		<tr>
			<td><div id="my_chart"></div></td>
		</tr>
	</table>
</body>
</html>

   最后运行程序,结果如下:

PS:第一次发表博文,写作能力有限,请多海涵...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!