11.6 Struts 2整合开发
Struts 2提供了JFreeChart插件支持,借助于该插件,Struts 2可以非常方便和容易地使用JFreeChart生成并显示统计图表。
11.6.1 安装JFreeChart插件
JFreeChart插件位于struts-2.0.11.1下的lib目录下。只需将该插件复制到Web应用下的WEB-INF\lib目录下就可以了。但是检查到这里有一个小小的错误,就是该插件下的“struts-plugin.xml”文件中的配置有些问题,代码如下所示。
<! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="jfreechart-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> </package> </struts>
从“struts-plugin.xml”配置文件中可以看出,其定义了一个包jfreechart-default,但是该包没有去继承struts-default。所以需要手动修改使得该jfreechart-default包继承Struts 2原有的默认包struts-default,代码如下所示。
<! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="jfreechart-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> </package> </struts>
修改完成后,将该插件解压出的文件夹重新打包成JAR,将其复制到Web应用下的WEB-INF\lib目录中。新建的包如果继承该jfreechart-default包,也就同样继承了Struts 2原有的默认包struts-default,这样就可以直接使用该默认包下定义好的资源了。
11.6.2 创建Action
安装好JFreeChart插件后,就可以在Struts 2中生成图表了。首先新建一个Action,在该Action中必须添加一个JFreeChart类型的属性,其属性名为chart,并为该属性添加setter和getter方法。在getChart()方法中添加创建该图表实例的代码,代码如下所示。
package net.hncu.action; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; import com.opensymphony.xwork2.ActionSupport; public class ShowChartAction extends ActionSupport { private JFreeChart chart; public JFreeChart getChart() { DefaultCategoryDataset dcd = new DefaultCategoryDataset(); //设置数据 dcd.setValue(800, "", "讲师"); dcd.setValue(400, "", "副教授"); dcd.setValue(100, "", "教授"); //使用工厂类创建柱状图 JFreeChart chart = ChartFactory.createBarChart( "学校职称人员统计图", "职称", "人员数量", dcd, PlotOrientation.VERTICAL , false, true, false); return chart; } public void setChart(JFreeChart chart) { this.chart = chart; } public String execute() throws Exception { return SUCCESS; } }
11.6.3 配置Action
配置该Action非常简单,只需为该Action指定一个类型为chart的Result。同时也可以为该Result指定两个参数:width和height,分别用来设置统计图的宽和高,代码如下所示。
<? xml version="1.0" encoding="UTF-8" ? > <! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="jfreechart-default"> <action name="showChart" class="net.hncu.action.ShowChartAction"> <result name="success" type="chart"> <param name="width">800</param> <param name="height">600</param> </result> </action> </package> </struts>
配置完该Action后,就可以生成统计图表了。打开浏览器,运行showChart.action。这时可以看到生成的统计图表,如图11.26所示。
图11.26 在网页中显示图表