struts2的整合Jfreechart

发表时间:2017-05-16 15:53:42 浏览量( 17 ) 留言数( 0 )

学习目标:

1、掌握使用struts2整合jfreechart


学习过程:

因为我们现在使用了struts2框架,所有会对jfreechart的servlet进行拦截,可能会影响jfreechart的显示的,所以struts2有一个插件可以非常简单的实现对jfreechart支持,而且更加简单。你可以浏览下面的文档

http://struts.apache.org/release/2.3.x/docs/jfreechart-plugin.html

1、导包

除了导入struts2的支持包和JFreeChart的包之外,还需要导入struts2对JFreeChart的支持包struts2-jfreechart-plugin-2.3.7.jar。web.xml不需要配置JFreeChart的serlvet了,只需要struts2的配置即可。

2、代码实现

我们只需要放回JFreeChary的对象即可,这里我提供了三种统计图的实现,代码如下:

public class UserAction extends ActionSupport {

	private JFreeChart chart;

	// 建立饼图
	public String createPie() {

		// 1、设置数据源
		DefaultPieDataset data = new DefaultPieDataset();
		data.setValue("java", 30);
		data.setValue("PHP", 10);
		data.setValue("C#", 30);

		// 2、生成图片
		chart = ChartFactory.createPieChart("编程语言", data, true, true, true);
		return SUCCESS;
	}

	//柱状图
	public String bar() {
		// 1、设置数据
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.setValue(530, "北京", "苹果");
		dataset.setValue(230, "北京", "雪梨");
		dataset.setValue(501, "北京", "香蕉");

		dataset.setValue(530, "上海", "苹果");
		dataset.setValue(150, "上海", "雪梨");
		dataset.setValue(550, "上海", "香蕉");

		dataset.setValue(550, "广州", "苹果");
		dataset.setValue(540, "广州", "雪梨");
		dataset.setValue(530, "广州", "香蕉");
		// 2、生成图片
		chart = ChartFactory.createBarChart("水果产量", "水果", "产量", dataset,
				PlotOrientation.VERTICAL, true, true, true);

		return SUCCESS;
	}

	//线性图
	public String tt() {
		// chart creation logic...
		XYSeries dataSeries = new XYSeries(new Integer(1)); // pass a key for
		Random random=new Random(System.currentTimeMillis());										// this serie
		for (int i = 0; i <= 100; i++) {
			System.out.println(random.nextInt(10));
			dataSeries.add(i, random.nextInt(10));
		}
		XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);

		ValueAxis xAxis = new NumberAxis("Raw Marks");
		ValueAxis yAxis = new NumberAxis("Moderated Marks");

		// set my chart variable
		chart = new JFreeChart("Moderation Function",
				JFreeChart.DEFAULT_TITLE_FONT, new XYPlot(xyDataset, xAxis,
						yAxis, new StandardXYItemRenderer(
								StandardXYItemRenderer.LINES)), false);
		chart.setBackgroundPaint(java.awt.Color.white);

		return super.SUCCESS;
	}

	public JFreeChart getChart() {
		return chart;
	}

	public void setChart(JFreeChart chart) {
		this.chart = chart;
	}

}


3、配置文件。你可以查看一下插件包struts2-jfreechart-plugin-2.3.7.jar的配置文件,

attcontent/82d49e79-265f-47dc-8eba-05ed1bec049a.png

它定义了一个新的result类型,所有我们如果要使用这个result类型,可以继承jfreechart-default包,当然你也可以把这个定义放在你所在的包里面,这里我们使用后面的方法。然后在定义上面三个Action方法,放回类型都是这个result类型。代码如下:

<package name="default" namespace="/" extends="struts-default">

		<result-types>
			<result-type name="chart"
				class="org.apache.struts2.dispatcher.ChartResult">
				<param name="height">150</param>
				<param name="width">200</param>
			</result-type>
		</result-types>

		<action name="createPie" class="com.action.UserAction" method="createPie">
			<result type="chart">
				<param name="height">400</param>
				<param name="width">400</param>
			</result>
		</action>

		<action name="bar" class="com.action.UserAction" method="bar">
			<result type="chart">
				<param name="height">400</param>
				<param name="width">400</param>
			</result>
		</action>
		
		<action name="tt" class="com.action.UserAction" method="tt">
			<result type="chart">
				<param name="height">400</param>
				<param name="width">400</param>
			</result>
		</action>

</package>

4、修改页面。也是定义一个img标签,src执行对应的action即可。

<img  src="createPie.action">
<br/>
<img  src="bar.action">
<br/>
<img  src="tt.action">

效果如下:

attcontent/ac3931f2-0e01-4a2a-8c52-34bdc763315d.png