jFreeChart与Struts2的组合:
一,加入Struts2支持
二,加入struts2-jfreechart-plugin-2.1.6.jar
注意:有的版本的此包有点小问题,此包内有一个struts-plugin.xml内容如下:
<struts> <package name="jfreechart-default" 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> </package> </struts>
若该package没有继承struts-default则需要手动加上extends="struts-default"再重新用jdk打包
三,在action中生成我们的图片报表
/**
* 生成图形报表
*
* @author 张明学
*
*/
@SuppressWarnings("serial")
public class ViewResultAction extends ActionSupport {
/**
* 这里的JFreeChart的变量名称必须是chart(这是jfreeChart插件不足的地方)
*/
private JFreeChart chart = null;
private List<String> interest = null;
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
Map application = context.getApplication();
for (String inter : interest) {
if (application.get(inter) == null) {
application.put(inter, 1);
} else {
application.put(inter, (Integer) application.get(inter) + 1);
}
}
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue((Integer) application.get("football"), "", "足球");
dataset.setValue((Integer) application.get("volleyball"), "", "排球");
dataset.setValue((Integer) application.get("basketball"), "", "蓝球");
dataset.setValue((Integer) application.get("badminton"), "", "羽毛球");
// 设置标题样式
chart = ChartFactory.createBarChart3D("兴趣统计结果", "项目", "结果", dataset,
PlotOrientation.VERTICAL, true, false, false);
chart.setTitle(new TextTitle("兴趣统计结果", new Font("黑体", Font.BOLD, 22)));
// 报表中间部分
CategoryPlot plot = (CategoryPlot) chart.getPlot();
// 设置水平方向的样式
CategoryAxis categoryAxis = plot.getDomainAxis();
categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
// 设置垂直方向的样式
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
numberAxis
.setLabelFont(new Font("仿宋", Font.LAYOUT_NO_LIMIT_CONTEXT, 18));
// 获得报表下面部分
// chart.getLegend();
return SUCCESS;
}
public List<String> getInterest() {
return interest;
}
public void setInterest(List<String> interest) {
this.interest = interest;
}
public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
}
四,struts.xml中的配置:
<struts> <package name="mengya" extends="jfreechart-default"> <action name="viewResult" class="com.mengya.action.ViewResultAction"> <result name="success" type="chart"> <!-- 指定图形报表的大小 --> <param name="height">600</param> <param name="width">800</param> </result> </action> </package> </struts>
注意:由于在第二步的时候将jfreechart-default包继承了struts-default故这里可以直接继承jfreechart-default
这样做的目地是result的type类型为chart,这个类型在struts-default中没有定义,是jreechart-default中定义的
故我们要引入jfreechart-default包,但又要引入struts-default,因此我们可以让jfreechart-default包继承了struts-default。
而在struts.xml中继承jfreechart-default就可以了!