action
1 package kite.struts2.action;
2
3 import java.awt.Font;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.InputStream;
7
8 import javax.annotation.Resource;
9
10 import org.jfree.chart.ChartFactory;
11 import org.jfree.chart.ChartUtilities;
12 import org.jfree.chart.JFreeChart;
13 import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
14 import org.jfree.chart.plot.PiePlot;
15 import org.jfree.data.general.DefaultPieDataset;
16 import org.springframework.context.annotation.Scope;
17 import org.springframework.stereotype.Controller;
18
19 import kite.domain.Question;
20 import kite.domain.statistics.OptionStatisticsModel;
21 import kite.domain.statistics.QuestionStatisticsModel;
22 import kite.service.StatisticsService;
23
24 @Controller("chartOutputAction")
25 @Scope("prototype")
26 public class ChartOutputAction extends BaseAction<Question>
27 {
28 @Resource(name="statisticsService")
29 StatisticsService statisticsService;
30 private Integer qid;
31
32 private Integer chartType;
33 public String execute() throws Exception
34 {
35 return SUCCESS;
36 }
37
38 public InputStream getInputStream()
39 {
40 try
41 {
42 QuestionStatisticsModel qsm = statisticsService.statistics(qid);
43 DefaultPieDataset ds = new DefaultPieDataset();
44 for(OptionStatisticsModel osm : qsm.getOsms())
45 {
46 ds.setValue(osm.getOptionLabel(), osm.getCount());
47 }
48 JFreeChart chart = ChartFactory.createPieChart(qsm.getQuestion().getTitle(), ds, true, false, false);
49
50 //设置标题和提示条中文
51 chart.getTitle().setFont(new Font("宋体",Font.BOLD, 25));
52 chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 20));
53
54 PiePlot plot = (PiePlot) chart.getPlot();
55 plot.setLabelFont(new Font("宋体", Font.PLAIN, 15));
56 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}(选择人数:{1}总数:{3} 占百分比:{2})"));
57
58 ByteArrayOutputStream baos = new ByteArrayOutputStream();
59 ChartUtilities.writeChartAsJPEG(baos, chart, 800, 600);
60 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
61 return bais;
62 } catch (Exception e)
63 {
64 e.printStackTrace();
65 }
66 return null;
67
68 }
69
70 public Integer getQid()
71 {
72 return qid;
73 }
74
75 public void setQid(Integer qid)
76 {
77 this.qid = qid;
78 }
79
80 public Integer getChartType()
81 {
82 return chartType;
83 }
84
85 public void setChartType(Integer chartType)
86 {
87 this.chartType = chartType;
88 }
89 }
struts.xml 文件配置
1 <action name="chartOutputAction" class="chartOutputAction">
2 <result name="success" type="stream">
3 <param name="contentType">image/jpeg</param>
4 <param name="inputName">inputStream</param>//getInputStream inputStream
5 <param name="bufferSize">1024</param>
6 </result>
7 </action>
改进 使用 struts2的 jfreechart插件 ChartResult
修改action 文件
1 public JFreeChart getChart()
2 {
3 try
4 {
5 QuestionStatisticsModel qsm = statisticsService.statistics(qid);
6 DefaultPieDataset ds = new DefaultPieDataset();
7 for(OptionStatisticsModel osm : qsm.getOsms())
8 {
9 ds.setValue(osm.getOptionLabel(), osm.getCount());
10 }
11 JFreeChart chart = ChartFactory.createPieChart(qsm.getQuestion().getTitle(), ds, true, false, false);
12
13 //设置标题和提示条中文
14 chart.getTitle().setFont(new Font("宋体",Font.BOLD, 25));
15 chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 20));
16
17 PiePlot plot = (PiePlot) chart.getPlot();
18 plot.setLabelFont(new Font("宋体", Font.PLAIN, 15));
19 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}(选择人数:{1}总数:{3} 占百分比:{2})"));
20
21 return chart;
22 } catch (Exception e)
23 {
24 e.printStackTrace();
25 }
26 return null;
27
28 }
修改xml配置文件 需要继承 jfreechart-default
<action name="chartOutputAction" class="chartOutputAction">
<result name="success" type="chart">
<param name="height">600</param>
<param name="width">800</param>
<param name="bufferSize">1024</param>
</result>
</action>