Struts2整合JfreeChart

action:

package com.cstp.action;

import java.awt.Font;
import java.util.List;
import java.util.Map;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ViewResultAction extends ActionSupport {
private static final long serialVersionUID = 1L;

private JFreeChart chart;//固定名字
private List<String> interest;

public JFreeChart getChart() {//拦截器调用getChart()方法获取图片对象
   chart = ChartFactory.createBarChart3D("兴趣统计结果", "项目", "结果", this
     .getDataset(), PlotOrientation.VERTICAL, true, true, false);
   Font font = new Font("宋体", Font.BOLD, 22);

   chart.setTitle(new TextTitle("兴趣统计结果", font));

   chart.getLegend().setItemFont(font);
   CategoryPlot plot = (CategoryPlot) chart.getPlot();

   CategoryAxis categoryAxis = plot.getDomainAxis();

   categoryAxis.setLabelFont(font);
   categoryAxis.setTickLabelFont(font);
   categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

   NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
   numberAxis.setLabelFont(font);
   // numberAxis.setTickLabelFont(new Font("宋体",Font.BOLD,22));//数字不会乱码,没必要
   return chart;
}

public List<String> getInterest() {
   return interest;
}

public void setInterest(List<String> interest) {
   this.interest = interest;
}

@Override
public String execute() throws Exception {
   return SUCCESS;
}

@SuppressWarnings("unchecked")
private void increaseResult(List<String> list) {
//应该写在业务类里
   ActionContext context = ActionContext.getContext();
   Map map = context.getApplication();
   for (String str : list) {
    if (null == map.get(str)) {//未勾选
     map.put(str, 1);
    } else {//选了的
     map.put(str, (Integer) map.get(str) + 1);
    }
   }
}

@SuppressWarnings("unchecked")
private CategoryDataset getDataset() {//获取数据集
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  
  this.increaseResult(this.getInterest());//算出投票结果
  
   ActionContext context = ActionContext.getContext();
   Map map = context.getApplication();
   dataset.setValue((Integer) map.get("football"), "足球", "足球");
   dataset.setValue((Integer) map.get("basketball"), "篮球", "篮球");
   dataset.setValue((Integer) map.get("volleyball"), "排球", "排球");
   dataset.setValue((Integer) map.get("badminton"), "羽毛球", "羽毛球");

   return dataset;
}

}

Struts.xml:

<package name="struts2_demo" extends="jfreechart-default"
   namespace="/">

新版本的插件struts2-jfreechart-plugin-2.1.6.jar里 的struts-plugin.xml里的

<package name="jfreechart-default" extends="struts-default"> 继承了struts-default 所以Struts.xml直接继承jfreechart-default 为什么不直接继承struts-default呢?因为struts-default里的result-type 没有chart 类型的。struts-plugin.xml里有。

<action name="viewResult" class="com.cstp.action.ViewResultAction">
    <result name="success" type="chart">
     <param name="height">600</param>
     <param name="width">800</param>
    </result>
   </action>

select.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1><font color="blue">请选择喜欢的运动项目</font></h1>

<s:form action="viewResult.action">
<s:checkbox name="interest" label="足球" fieldValue="football" labelposition="left"></s:checkbox>
<s:checkbox name="interest" label="篮球" fieldValue="basketball" labelposition="left"></s:checkbox>
<s:checkbox name="interest" label="排球" fieldValue="volleyball" labelposition="left"></s:checkbox>
<s:checkbox name="interest" label="羽毛球" fieldValue="badminton" labelposition="left"></s:checkbox>

<!–
<s:checkboxlist list="#{‘computer’ : ‘计算机’ , ‘math’ : ‘数学’}" name="interest" label="浪曦" labelposition="top">
</s:checkboxlist>
–>

<s:submit value="提交"></s:submit>
</s:form>

</body>
</html>

效果图:

多次来回提交产生的效果(值保存在Application中):

此条目发表在 Struts2 分类目录,贴了 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>