Struts2+JFreeChart动态生成页面。功能优先
2013-10-16 17:24
281 查看
最近在做一个动态的分析页面,用到了JFreeChart,查找了很多资料 ,发现没有一个完整的资料,最后自己东拼西凑,算是完成功能了,这里我来自己总结一下使用中碰到的问题。首先说一下,jfreechart官网下载的没有struts2的插件,这样的话,如果使用struts2框架,就没法弄了。我已经将相关struts2-jfreechart插件及jar包上传了,地址点击打开链接
先上效果图,大概了解下:
项目框架是ssh,先来说页面图片的设置:
主要就是<img src="....."/>就可以了,当然动态的嘛,自己去设置动态的src,然后<s:iterator>就可以了!界面就这么简单,接下来到控制器这块,先上strust.xml里的配置,需要所在的package继承jfreechart-default即可。
参数就是返回的图片宽度和高度,当然你也可以在界面设置img标签的这两个属性。接下来是action
其实也没什么内容,主要是调用业务层的方法,不过有一点是查资料知道的,就是struts2中
接下来粘上业务层方法:
其实大部分都是业务逻辑方法,我这个意思是flag值为0返回的是饼图,1返回的是柱状图,JFreeChart使用流程,其实就是创建一个数据集,比如:
之后调用它的addValue或者setValue方法,设置横纵轴的显示文字和最重要的显示的数据,动态的效果其实就循环调用赋值而已,有了数据集之后,调用JFreeChart的工厂的方法,即ChartFactory.createXXXXX,这里就多了,我这里只创建了两种格式,更多的可以参见API文档,最后还要提一下,表格还要设置字体,否则会出现乱码!我这里只实现了最简单的功能,如果想让表格美化,还需要进行其他API的调用及设置。
先上效果图,大概了解下:
项目框架是ssh,先来说页面图片的设置:
<img src="replyCensusChart.action?paper.id=<s:property value="paper.id"/>&problem.id=<s:property value="#pro.id"/>&chartType=0"/> <img src="replyCensusChart.action?paper.id=<s:property value="paper.id"/>&problem.id=<s:property value="#pro.id"/>&chartType=1"/>
主要就是<img src="....."/>就可以了,当然动态的嘛,自己去设置动态的src,然后<s:iterator>就可以了!界面就这么简单,接下来到控制器这块,先上strust.xml里的配置,需要所在的package继承jfreechart-default即可。
<package name="paper" namespace="/paper" extends="json-default,jfreechart-default,default" ><action name="replyCensusChart" class="com.capinfo.question.paper.action.PaperAction" method="replyCensusChart"> <result type="chart"><param name="width">350</param><param name="height">300</param></result> </action> </package>
参数就是返回的图片宽度和高度,当然你也可以在界面设置img标签的这两个属性。接下来是action
public String replyCensusChart(){ if(chartType.equals("0")){ chart = paperBusiness.createJFreeChart(paper, problem,"0"); }else if(chartType.equals("1")){ chart = paperBusiness.createJFreeChart(paper, problem,"1"); } return SUCCESS; }
其实也没什么内容,主要是调用业务层的方法,不过有一点是查资料知道的,就是struts2中
@Getter@Setter private JFreeChart chart;必须是chart这个名字,具体我没有查询,上边的两个标签是lombok插件的,可以直接无视,自己在底下加上设置和获取chart方法就可以了
接下来粘上业务层方法:
public JFreeChart createJFreeChart(Paper paper,Problem problem,String flag) { List<Reply> replys = replyDao.findReplyByPaper(paper);//获得所有相同问卷id的答卷 Integer amount = replys.size();//答卷数量 List<ProblemOption> problemOptions = problemOptionDao.findOptionsByProblemId(problem.getId()); JFreeChart chart = null; Font font = new Font("宋体", Font.ITALIC, 12); if(flag.equals("0")){ DefaultPieDataset dataset = new DefaultPieDataset(); for(int i=0;i<problemOptions.size();i++){ Integer optionCount = replyDao.countOptionByOptionId(paper.getId(), problemOptions.get(i).getId());//该选项的被选择数量 //Double result = (double) (Math.round((optionCount * 10*100.0/ amount)))/10;//计算该选项被选的概率 //System.out.println("第"+(i+1)+"题的第"+(i+1)+"个选项的选择概率为:"+result+" %"); dataset.setValue(problemOptions.get(i).getSign()+":选择人数为:"+optionCount+"人", optionCount); } chart = ChartFactory.createPieChart3D("该题选择人数饼图", dataset, true, true, false); PiePlot plot = (PiePlot) chart.getPlot(); chart.getTitle().setFont(font); plot.setLabelFont(font); chart.getLegend().setItemFont(font); }else if(flag.equals("1")){ DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for(int i=0;i<problemOptions.size();i++){ Integer optionCount = replyDao.countOptionByOptionId(paper.getId(), problemOptions.get(i).getId());//该选项的被选择数量 Double result = (double) (Math.round((optionCount * 10*100.0/ amount)))/10;//计算该选项被选的概率 dataset.addValue(result,problemOptions.get(i).getSign()+"选项概率为:"+result+"%", problemOptions.get(i).getSign()+":"+result+"%"); } chart = ChartFactory.createBarChart3D("该题选项概率图", "选项", "概率(百分比)", dataset, PlotOrientation.VERTICAL, true, false, false); CategoryPlot categoryplot = chart.getCategoryPlot(); // 1、对标题 chart.getTitle().setFont(font); // 标题 // 2、对图里面的汉字设定,也就是Plot的设定 categoryplot.getDomainAxis().setLabelFont(font);// 相当于横轴或理解为X轴 categoryplot.getRangeAxis().setLabelFont(font);// 相当于竖轴理解为Y轴 // 3、下面的方块区域是 LegendTitle 对象 chart.getLegend().setItemFont(font);// 最下方 } return chart; }
其实大部分都是业务逻辑方法,我这个意思是flag值为0返回的是饼图,1返回的是柱状图,JFreeChart使用流程,其实就是创建一个数据集,比如:
DefaultPieDataset dataset = new DefaultPieDataset();//饼图数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();//柱状图数据集
之后调用它的addValue或者setValue方法,设置横纵轴的显示文字和最重要的显示的数据,动态的效果其实就循环调用赋值而已,有了数据集之后,调用JFreeChart的工厂的方法,即ChartFactory.createXXXXX,这里就多了,我这里只创建了两种格式,更多的可以参见API文档,最后还要提一下,表格还要设置字体,否则会出现乱码!我这里只实现了最简单的功能,如果想让表格美化,还需要进行其他API的调用及设置。
相关文章推荐
- struts2+jsp+jfreechart在JSP页面生成图表
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- struts中调用servlet动态生成柱状图到jsp页面
- 动态生成 WebUpload 实现列表页面的上传功能
- 利用ASP.NET技术动态生成HTML页面
- Asp.net动态生成html页面[转]
- 【转】C#动态生成html页面
- Asp.net动态生成html页面
- 也谈WEB打印(四):让我们的模板支持打印,并根据内容动态的生成页面
- 动态生成页面,页面所有属性均来自数据库
- 动态生成的tab选项卡功能
- 添加时动态的在页面生成表格,使用ajax异步在后台添加到数据库
- (IBM)Struts 2 中 JFreeChart 插件的使用分析和功能改进
- Asp.net动态生成html页面
- Asp.net动态生成html页面(适用于CMS)
- 一个页面实现修改删除列表显示,ajax动态生成table(使用ajax,springmvc,jsp)
- 6.Struts访问受保护的页面,动态ActionForward:struts-config.xml
- 动态生成带格式页面
- Asp.net动态生成页面控件的办法
- C#动态生成html页面