`
liyanboss
  • 浏览: 141799 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

在struts2中使用JFreeChart

阅读更多
继续上一篇的 在struts2中使用JasperReports,这篇是如何在web页面上输出chart(图表)。

1、在struts2中,默认的struts-default.xml中,并没有包含chart的result-type,它是插件的形式使用的。把 struts2的解压包的lib里找到struts2-jfreechart-plugin-2.0.11.jar,拷贝到你的项目的 classpath里,同时在struts.xml里面增加一个chart的result-type。
<result-types>
	<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"/>
</result-types>
<action name="ListAllFruit4Bar2" class="chart.ListAllFruit4Bar2Action">
	<result name="success" type="chart">
		<param name="chart">chart</param>
		<param name="height">400</param>
		<param name="width">700</param>
	</result>
</action>
<action name="ListAllFruit4Pie2" class="chart.ListAllFruit4Pie2Action">
	<result name="success" type="chart">
		<param name="chart">chart</param>
		<param name="height">400</param>
		<param name="width">700</param>
	</result>
</action>

2、需要再添加jfreechart-1.0.9.jar和jcommon-1.0.12.jar(JasperReports和JFreeChart都需要的)到你的classpath里面。
3、在你的action代码里,返回一个JFreeChart对象即可。
ListAllFruit4Bar2Action代码:
package chart;

import org.jfree.chart.JFreeChart;

import com.opensymphony.xwork2.ActionSupport;

public class ListAllFruit4Bar2Action extends ActionSupport {
	private static final long serialVersionUID = 1L;
    private JFreeChart chart;
	
	@Override
	public String execute() throws Exception {
		chart = FruitService.createBarChart();
		return SUCCESS;
	}
	
	public JFreeChart getChart() {
		return chart;
	}
}

ListAllFruit4Pie2Action代码:
package chart;

import org.jfree.chart.JFreeChart;

import com.opensymphony.xwork2.ActionSupport;

public class ListAllFruit4Pie2Action extends ActionSupport {
	private static final long serialVersionUID = 1L;
    private JFreeChart chart;
	
	@Override
	public String execute() throws Exception {
		chart = FruitService.createPaiChart();
		return SUCCESS;
	}
	
	public JFreeChart getChart() {
		return chart;
	}
}


FruitService代码:
package chart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class FruitService {

	public static JFreeChart createBarChart() {
		CategoryDataset dataset = getDataSet2();
		JFreeChart chart = ChartFactory.createBarChart3D(
				"水果产量图", // 图表标题
				"水果", // 目录轴的显示标签
				"产量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, 	// 是否显示图例(对于简单的柱状图必须是false)
				true, 	// 是否生成工具
				true 	// 是否生成URL链接
				);
		return chart;
	}

	private static CategoryDataset getDataSet2() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(100, "北京", "苹果");
		dataset.addValue(100, "上海", "苹果");
		dataset.addValue(100, "广州", "苹果");
		dataset.addValue(200, "北京", "梨子");
		dataset.addValue(200, "上海", "梨子");
		dataset.addValue(200, "广州", "梨子");
		dataset.addValue(300, "北京", "葡萄");
		dataset.addValue(300, "上海", "葡萄");
		dataset.addValue(300, "广州", "葡萄");
		dataset.addValue(400, "北京", "香蕉");
		dataset.addValue(400, "上海", "香蕉");
		dataset.addValue(400, "广州", "香蕉");
		dataset.addValue(500, "北京", "荔枝");
		dataset.addValue(500, "上海", "荔枝");
		dataset.addValue(500, "广州", "荔枝");
		return dataset;
	}
     
    public static JFreeChart createPaiChart() {
		DefaultPieDataset data = getDataSet();
		JFreeChart chart = ChartFactory.createPieChart3D("水果产量图",  // 图表标题
		data, 
		true, // 是否显示图例
		false,
		false
		);
		PiePlot plot = (PiePlot) chart.getPlot();
		resetPiePlot(plot);
		return chart;
	}
	
	private static void resetPiePlot(PiePlot plot) {
		String unitSytle = "{0}={1}({2})";
		
		plot.setNoDataMessage("无对应的数据,请重新查询。");
		plot.setNoDataMessagePaint(Color.red);
		
		//指定 section 轮廓线的厚度(OutlinePaint不能为null)
		plot.setOutlineStroke(new BasicStroke(0));
		
		//设置第一个 section 的开始位置,默认是12点钟方向
		plot.setStartAngle(90);			

		plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle,
				NumberFormat.getNumberInstance(),
				new DecimalFormat("0.00%")));
		
		//指定图片的透明度
		plot.setForegroundAlpha(0.65f);
		
		//引出标签显示样式
		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,
				NumberFormat.getNumberInstance(),
				new DecimalFormat("0.00%")));
			
		//图例显示样式
		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,
				NumberFormat.getNumberInstance(),
				new DecimalFormat("0.00%")));
	}

	private static DefaultPieDataset getDataSet() {
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("苹果",100);
		dataset.setValue("梨子",200);
		dataset.setValue("葡萄",300);
		dataset.setValue("香蕉",400);
		dataset.setValue("荔枝",500);
		return dataset;
	}

}

4、同时在jsp页面里显示--柱图和饼图。
增加一个ListAllFruit4BarAndPie的action:
<action name="ListAllFruit4BarAndPie" class="">
	<result name="success" type="dispatcher">/WEB-INF/chart/ListAllFruit4BarAndPie.jsp</result>
</action>

ListAllFruit4BarAndPie.jsp代码:
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
    <title>ListAllFruit4BarAndPie</title>
</head>
<body>
	<center><h2>使用柱图和饼图列取所有水果产量</h2></center>
	柱图:<img src="chart/ListAllFruit4Bar2.action"><br/>
	饼图:<img src="chart/ListAllFruit4Pie2.action">
</body>
</html>


            
生成的HTML的效果图如下:


下面是除了依赖的jar以外的所有源代码,share出来,欢迎下载。
分享到:
评论
9 楼 yuchensuifeng 2012-05-02  
谢谢分享!刚学这个,现在去试试!
8 楼 wrrwhn 2011-08-23  
Caused by: There is no result type defined for type 'chart' mapped with name 'success'.  Did you mean 'chart'? - result - file:/D:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/WareStore/WEB-INF/classes/struts.xml:59:40

你好,在使用你的方法中,出现了此种情况,请问你是否还有印象,此种情况是哪里出错吗?
7 楼 wu_yaowen 2010-01-13  
<action name="ListAllFruit4Bar2" class="chart.ListAllFruit4Bar2Action">  
     <result name="success" type="chart">  
         <param name="chart">chart</param>  
         <param name="height">400</param>  
         <param name="width">700</param>  
     </result>  
 </action>  
 <action name="ListAllFruit4Pie2" class="chart.ListAllFruit4Pie2Action">  
     <result name="success" type="chart">  
         <param name="chart">chart</param>  
         <param name="height">400</param>  
         <param name="width">700</param>  
     </result>  
 </action>  


这里是错的哈,         <param name="chart">chart</param> 
应该为         <param name="value">chart</param> 
后面的chart为你action中定义的域变量,比如piechart或什么什么的
6 楼 liyanboss 2009-05-27  
zhouwendong006 写道

为什么最后的Java代码 &lt;action&nbsp;name="ListAllFruit4BarAndPie"&nbsp;class=""&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result&nbsp;name="success"&nbsp;type="dispatcher"&gt;/WEB-INF/chart/ListAllFruit4BarAndPie.jsp&lt;/result&gt;&nbsp;&nbsp;&lt;/action&gt;&nbsp;&nbsp;&lt;action name="ListAllFruit4BarAndPie" class=""&gt;
&lt;result name="success" type="dispatcher"&gt;/WEB-INF/chart/ListAllFruit4BarAndPie.jsp&lt;/result&gt;
&lt;/action&gt;中的class的值为空呢?


最后一个是List Action,默认是直接返回SUCCESS,使用空的Action,其实是默认使用了ActionSupport
5 楼 zhouwendong006 2009-05-20  
为什么最后的
<action name="ListAllFruit4BarAndPie" class="">
	<result name="success" type="dispatcher">/WEB-INF/chart/ListAllFruit4BarAndPie.jsp</result>
</action>

中的class的值为空呢?
4 楼 yehaoren 2009-03-13  
你好,我想问下,#  plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle, 
#                 NumberFormat.getNumberInstance(), 
#                 new DecimalFormat("0.00%"))); 
这段代码是不是生成鼠标提示的,你的例子里,提示好像显示不出来啊
3 楼 w469 2009-03-02  
谢谢!!!!!
对我帮助很大!
2 楼 shaqiang32 2008-09-28  
李大哥,我是小刘啊,居然在javaeye都能碰到,,,这个好像是你上次教我的那个报表程序?
1 楼 liukidd 2008-05-04  
如果数据量大,这种方法可行吗?

相关推荐

    struts2+jfreechart

    在Struts2中使用JFreeChart创建图表,通常包括以下步骤: 1. **引入依赖**:在项目的`pom.xml`或`build.gradle`文件中添加JFreeChart和Struts2的依赖。 2. **创建Action**:定义一个Struts2 Action类,该类负责生成...

    Struts2 与JFreeChart结合使用实例

    首先,为了在Struts2中使用JFreeChart,我们需要在项目中引入JFreeChart的依赖库。这通常通过在Maven的pom.xml文件中添加对应的依赖或者在项目的类路径下添加jar包完成。 接下来,我们创建一个Action类,这是Struts...

    Struts2中使用JfreeChart

    在Struts2中整合JFreeChart,可以方便地生成各种图表,如柱状图、饼图、线图等,用于数据可视化。JFreeChart是一个用Java编写的开源库,专门用于生成高质量的2D图表。 首先,我们需要理解Struts2的MVC设计模式。在...

    struts2整合JFreeChart

    接下来,我们关注如何在Struts2中使用JFreeChart。在Struts2框架中,我们需要创建一个Action类,该类负责处理用户的请求,并生成图表。Action类中可以包含一个方法,该方法创建JFreeChart对象并将其转换为...

    struts2整合jfreechart

    1. **引入依赖**:首先,为了在Struts2中使用JFreeChart,需要将`struts2-jfreechart-plugin-2.0.11.jar`这个插件添加到项目类路径中。这个插件包含了Struts2与JFreeChart整合所需的功能。同时,还需要`jfreechart-...

    struts2 + jfreechart demo

    4. **图表在视图层的展示**:在Struts2中,通常会将生成的图表作为图像流(ImageStream)返回,通过ActionResult的类型(如StreamResult)来实现。这涉及到设置图表的输出格式(如JPEG或PNG),以及在Action中设置...

    struts2与jfreechart整合

    3. **生成图表**:在Struts2 Action中,使用JFreeChart API生成图表,这包括设置图表标题、轴标签、数据集等。例如,可以使用`CategoryDataset`来创建柱状图或饼图,`XYDataset`用于创建线图。 4. **转换为图像**:...

    jfreechart+struts2 图形报表

    要在Struts2中使用JFreeChart,首先需要将JFreeChart的库文件添加到项目依赖中。然后,可以创建一个Action类,该类将处理用户请求,并生成图表。这个Action通常会接收来自前端的请求参数,如Excel数据,然后使用...

    struts2整合 jfreechart 实现报表

    在Struts2中,我们可以使用`StreamingActionResult`或者自定义`Result`类型来实现。例如: ```java public String generateReport() { JFreeChart chart = ChartService.createSalesChart(salesData); ...

    struts2-jfreechart-plugin-2.1.6.jar.zip_jfreechart struts2_jfree

    在Struts2中集成JFreeChart,可以方便地在Web应用中创建动态图表,例如展示统计信息或者监控系统状态。 "struts2-jfreechart-plugin-2.1.6.jar.zip_jfreechart struts2_jfree" 这个标题表明这是一个关于Struts2与...

    Struts中使用Jfreechart

    在Struts框架中使用JFreeChart是一个常见的需求,主要用于生成动态图表,比如饼图、柱状图、线图等,以便在Web应用中展示数据。JFreeChart是一个强大的Java库,能够创建各种复杂的统计图表,但与Struts结合时可能会...

    投票系统JSP +JavaBean+Struts2+JDBC+JFreeChart

    这是一个获取用户信息的投票系统,包含需求及代码,可以了解投票系统的基本需求,如何分析和设计数据库、使用JSP +JavaBean+Struts2+JDBC+JFreeChart进行开发、学会MySQL数据库的基本使用、使用JFreeChart画柱状图、...

    JFreeChart(Struts1+jFreeChart)

    标题 "JFreeChart(Struts1+jFreeChart)" 提到的是在Struts1框架中集成JFreeChart库进行图表展示的技术。JFreeChart是一个强大的Java库,它提供了多种图表类型,如柱状图、饼图、线图、散点图等,用于数据可视化。而...

    struts2结合jfreechart框架出现图形所需的包

    在Struts2中,通常会创建一个Action类来处理请求,然后将结果模型(包括图表数据)返回给视图。你需要确保Action类正确地创建了JFreeChart对象,并将其转换为可以被浏览器理解的格式,如PNG、JPEG或SVG。这通常涉及...

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.1.8.1.jar

    jfreechart struts2.0

    1. **在Struts2中使用JFreeChart**:通过Action类创建JFreeChart对象,并将其作为模型的一部分传递给视图。在JSP页面中,利用JavaServer Pages标准标签库(JSTL)或自定义标签来渲染图表。 2. **图表作为Action结果...

    struts2-jfreechart-plugin-2.0.11.jar

    struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar

Global site tag (gtag.js) - Google Analytics