<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<script type="text/javascript" src="<%=request.getContextPath() %>/ofc2/swfobject.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/ofc2/json2.js"></script>
<body>
<div id="div1"></div>
<p><input type="button" value="重新加载" onclick="reload1()" > </p>
<div id="div2" ></div>
</body>
</html>
<script type="text/javascript" language="javascript">
//定义第一个Flash控件
swfobject.embedSWF("<%=request.getContextPath() %>/ofc2/open-flash-chart.swf", "div1", "50%", "280","9.0.0", "expressInstall.swf",
{"data-file" : "<%=request.getContextPath() %>/servlet/GlassChartServlet"},
{wmode : "transparent"}
);
//定义第二个Flash控件
swfobject.embedSWF("<%=request.getContextPath() %>/ofc2/open-flash-chart.swf", "div2", "50%", "280","9.0.0", "expressInstall.swf",
{"data-file" : "<%=request.getContextPath() %>/servlet/GlassChartServlet"},
{wmode : "transparent"}
);
//根据请求一个URL,重新加载第一个Flash控件的数据
function reload1()
{
tmp = findSWF("div1");
x = tmp.reload( "<%=request.getContextPath() %>/servlet/GlassChartServlet" );
}
//第二个Flash控件,直接加载JSON数据
function reload2()
{
tmp = findSWF("div2");
x = tmp.load( JSON.stringify(getNewData()) );
}
//生成一个JSON数据对象
function getNewData()
{
var arraylist=[
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random()),
parseInt(100*Math.random())
];
var data = {
"title":{"text":"Sales by Month 2007","style":"font-size: 14px; font-family: Verdana; text-align: center;"},
"x_axis":{"labels":{"labels":["J","F","M","A","M","J","J","A","S","O","N",{"text":"Dec", "colour":"#000000", "size":10, "rotate":45}]}},
"y_axis":{"steps":16, "max":160},
"bg_colour":"#ffffff",
"elements":[{"type":"bar_glass", "tip":"$#val#", "values":arraylist, "colour":"#00aa00"}]
}
return data;
}
//定时器,自动重新加载数据
setInterval(reload2,"1000");
//查找SWF控件
function findSWF(movieName)
{
if (navigator.appName.indexOf("Microsoft")!= -1) {
return window[movieName];
} else {
return document[movieName];
}
}
</script>
package com.flashchart;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jofc2.model.Chart;
import jofc2.model.Text;
import jofc2.model.axis.XAxis;
import jofc2.model.axis.YAxis;
import jofc2.model.elements.BarChart;
import jofc2.model.elements.BarChart.Bar;
public class GlassChartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
Map<String, Long> dataMap = new LinkedHashMap<String, Long>();
String[] month={"一月","二月","三月","四月","五月","六月","七月","八月"};
for(int i=0;i<8;i++)
{
dataMap.put(month[i],Math.round(Math.random()*710));
}
Chart ofc2Chart = new Chart();
Text title = new Text("2010年度XXXXX业务办理量");
ofc2Chart.setTitle(title);
BarChart barChart = new BarChart(BarChart.Style.GLASS); // 设置条状图样式
XAxis x = new XAxis(); // X 轴
for (Entry<String, Long> entry : dataMap.entrySet())
{
x.addLabels(entry.getKey()); // x 轴的文字
Bar bar = new Bar(entry.getValue(),"起 ");
bar.setColour("0x336699"); // 颜色
bar.setTooltip(entry.getValue() + "起 "); // 鼠标移动上去后的提示
barChart.addBars(bar);
}
ofc2Chart.addElements(barChart);
ofc2Chart.setXAxis(x);
double ymax = 720d; // Y 轴最大值
YAxis y = new YAxis(); // y 轴
y.setMax(ymax + 1.0); // y 轴最大值
y.setSteps(ymax / 10); // y 轴步进
ofc2Chart.setYAxis(y);
String jsonChart = ofc2Chart.toString();
out.write(jsonChart);
out.flush();
out.close();
}
}
function reload()
{
tmp = findSWF("chart");
//
// reload the data:
//
x = tmp.reload();
//
// to load from a specific URL:
// you may need to 'escape' (URL escape, i.e. percent escape) your URL if it has & in it
//
x = tmp.reload("gallery-data-32.php?beer=1");
//
// do NOT show the 'loading...' message:
//
x = tmp.reload("gallery-data-32.php?beer=1", false);
}
function findSWF(movieName) {
if (navigator.appName.indexOf("Microsoft")!= -1) {
return window["ie_" + movieName];
} else {
return document[movieName];
}
}
按照官方资料,我在设置第二个参数时,它就报错,这里先记下了,有待解决?
// do NOT show the 'loading...' message:
x = tmp.reload( "<%=request.getContextPath() %>/servlet/GlassChartServlet",false );
上一张效果图,如下: