Struts2+JFreeChart使用的是Struts2的返回类型来显示图片,但是在页面貌似没有鼠标事件,此方式可参考这篇:
1、
http://liyanboss.iteye.com/blog/181282
2、
http://www.cnblogs.com/over140/articles/971663.html
以下JSP+Struts2+JFreeChart是能显示鼠标事件的,但是不是Struts2的返回类型,以下是实现。
action:
package action;
import java.awt.Rectangle;
import java.awt.Shape;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
//页面鼠标事件时需要的参数
private String hy_filename;
/**
* 显示图片
* @return
*/
public String show(){
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse res = ServletActionContext.getResponse();
hy_filename = createChartImage(req, res);
return SUCCESS;
}
private String createChartImage(HttpServletRequest req, HttpServletResponse res){
JFreeChart chart = createChart(createData());
String filename = createUseMap(chart, 510, 300, req, res);
return filename;
}
private JFreeChart createChart(DefaultCategoryDataset defaultcategorydataset){
JFreeChart chart = ChartFactory.createLineChart(null, //图形标题名称
null, //domain轴 Lable,横坐标Lable
null, //range 轴 Lable,纵坐标Lable
defaultcategorydataset, // dataset
PlotOrientation.VERTICAL, //垂直显示
true, // legend?
true, // tooltips?
false); //URLs?
return chart;
}
private String createUseMap(JFreeChart chart, int width, int height, HttpServletRequest req, HttpServletResponse res){
//在矩形框中显示信息
Shape shape = new Rectangle(20, 10);
ChartEntity entity = new ChartEntity(shape);
StandardEntityCollection coll = new StandardEntityCollection();
coll.add(entity);
//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。
ChartRenderingInfo info = new ChartRenderingInfo(coll);
PrintWriter pw;
String filename = null;
try {
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
pw = res.getWriter();//输出MAP信息
//写入到输出流生成图像文件,同时把图片的具体信息放入ChartRenderingInfo的一个实例为以后生成Map提供信息
//ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
filename = ServletUtilities.saveChartAsPNG(chart, width , height, info, req.getSession());//保存图表为文件
//读取info对象,生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out,也就是直接输出到页面了
ChartUtilities.writeImageMap(pw, filename, info, false);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}
private DefaultCategoryDataset createData(){
String series1 = "血糖";
String series2 = "舒张压";
String series3 = "收缩压";
String type1 = "2009-01-01";
String type2 = "2009-02-01";
String type3 = "2009-03-01";
String type4 = "2009-04-01";
String type5 = "2009-05-01";
String type6 = "2009-06-01";
String type7 = "2009-07-01";
String type8 = "2009-08-01";
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, type1);
defaultcategorydataset.addValue(2D, series1, type2);
defaultcategorydataset.addValue(3D, series1, type3);
defaultcategorydataset.addValue(5D, series1, type4);
defaultcategorydataset.addValue(5D, series1, type5);
defaultcategorydataset.addValue(7D, series1, type6);
defaultcategorydataset.addValue(7D, series1, type7);
defaultcategorydataset.addValue(8D, series1, type8);
defaultcategorydataset.addValue(5D, series2, type1);
defaultcategorydataset.addValue(7D, series2, type2);
defaultcategorydataset.addValue(6D, series2, type3);
defaultcategorydataset.addValue(8D, series2, type4);
defaultcategorydataset.addValue(4D, series2, type5);
defaultcategorydataset.addValue(4D, series2, type6);
defaultcategorydataset.addValue(2D, series2, type7);
defaultcategorydataset.addValue(1.0D, series2, type8);
return defaultcategorydataset;
}
public String getHy_filename() {
return hy_filename;
}
public void setHy_filename(String hy_filename) {
this.hy_filename = hy_filename;
}
}
页面:index.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JfreeChartTest</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<P ALIGN="center">
有鼠标事件:
<img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" usemap="#<s:property value='hy_filename'/>" border="0">
无鼠标事件:
<img src="<%=request.getContextPath() %>/servletDisplayChart?filename=<s:property value='hy_filename'/>" border="0">
</P>
</body>
</html>
struts.xml:
加上以下内容:
<action name="show" method="show" class="action.LoginAction">
<result>index.jsp</result>
<interceptor-ref name="defaultStack"/>
</action>
web.xml:
加上以下内容:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servletDisplayChart</url-pattern>
</servlet-mapping>
运行效果:
访问:http://localhost:8080/工程名/show.action
=========================================================================
看完文章,请到 “品润茶业”购买 茶叶茶具和零食,切记!
地址:http://prtea.taobao.com
=========================================================================
- 大小: 24.7 KB
分享到:
相关推荐
本教程将详细介绍如何使用Java和Struts2框架来实现在网页上显示各种图表,如折线图、柱状图和饼状图。 首先,我们需要引入图表库。常见的Java图表库有JFreeChart和Chart.js等。在这个案例中,我们可能使用...
2. 创建JFreeChart的图表模型,填充数据。 3. 将生成的图表转换为适合Web展示的图像。 4. 在Struts的Action中处理HTTP请求,调用JFreeChart生成图像,并将结果返回给视图。 5. 在视图(通常是JSP页面)中展示图表...
5. **JSP页面展示**: 在JSP页面上,通过一个隐藏的IFrame或者JavaScript动态加载图像URL,该URL指向由Struts1 Action生成的图表。由于图表是以图像流的形式返回,所以可以直接在HTML页面上显示。 6. **安全与性能...
整合Struts2与JFreeChart,可以将JFreeChart生成的图表无缝地集成到Web应用中,为用户提供直观的数据展示。以下是如何实现这一整合的关键步骤和知识点: 1. **JFreeChart库的引入**:首先,你需要在项目的类路径下...
开发者可以在Struts2的Action中处理业务逻辑,然后利用JFreeChart生成图表,最后通过Struts2的Result返回到视图层展示。例如,可以创建一个Action来获取数据库中的销售数据,然后使用JFreeChart生成一个柱状图来显示...
整合Struts2和JFreeChart,主要是为了让Struts2的Action能够生成JFreeChart图表,并将其以图片或其他格式返回给客户端。以下是一般的整合步骤: 1. **引入依赖**: 在项目中添加Struts2和JFreeChart的依赖库。 2. **...
7. **视图渲染**:在视图层,可能是一个JSP或FreeMarker模板,使用适当的标签库(如struts2-jasperreports-plugin提供的标签)来显示报表,确保用户可以看到生成的图表。 8. **交互性**:虽然JFreeChart生成的图表...
Struts2是一种基于MVC设计模式的开源框架,用于构建企业级Web应用程序,而JFreeChart则是一个强大的图表生成库,能够创建各种类型的图表,如饼图、柱状图、线图等,适用于数据可视化需求。 首先,让我们深入理解...
结合这三个技术,开发者可以创建一个Web应用,用户通过Struts2的Action发送请求,Action处理后从MySQL数据库中查询数据,然后使用JFreeChart将数据转化为图表展示。例如,可以创建一个报表系统,用户可以根据不同...
Struts2的`<s:url>`标签会生成指向Action的URL,从而在页面上显示图表。 6. **优化性能**:为了提高性能,可以考虑缓存生成的图表,避免每次请求都重新计算。可以使用内存缓存或者文件系统缓存。 7. **进一步定制...
在视图层,通常是一个JSP页面,你可以使用Struts2的标签库来显示这个`byte[]`数组。使用`<s:property value="byteArray" />`标签,并设置`escape="false"`,以防止字符转义,这样Struts2会自动处理这个字节数组,将...
当你尝试在Struts2应用中集成JFreeChart来展示图形时,可能会遇到一些问题,导致图形无法正常显示。以下是一些可能导致问题的关键知识点和解决策略。 首先,确保正确导入了所有必要的JFreeChart依赖。JFreeChart...
在客户端的 JSP 页面上,你可以使用 Struts2 的标签库来显示图表。例如,使用 `<s:chart>` 标签,传入 Action 中的图表对象,这样就可以在浏览器中显示生成的饼图。 通过以上步骤,你已经成功地在 Struts2 应用中...
此外,描述中提到的"简要的文档说明和代码"可能包括了具体步骤的指导,如如何配置Struts2的拦截器、Action类如何编写、以及JSP页面如何显示图表等。开发者可以参考这些文档来快速理解和实现整合过程。 总的来说,...
在企业级应用中,通常需要生成各种报表和统计图表来展示数据,而Struts2和JFreeChart的结合就提供了解决这一需求的有效途径。 Struts2是一个基于MVC设计模式的Web应用框架,它简化了Java Servlet和JavaServer Pages...
通过这种方式,开发者可以利用Struts2的灵活性和JFreeChart的强大图表功能,轻松创建各种复杂的数据分析和展示应用,满足各种业务需求。无论是监控系统性能、分析销售数据,还是展示任何其他需要可视化的信息,这种...
如果是代码文件,可能是处理图表显示的Java或JSP文件,包含具体的jfreeChart和Struts的实现细节。 总的来说,这个项目展示了如何结合jfreeChart的强大图表功能、Struts的MVC架构以及数据库技术,开发出一个可以动态...
而在Struts2的Web应用中,通常会将图表保存为图像文件,然后在JSP页面中通过`<img>`标签显示。这通常涉及到`ChartUtilities`类的`writeChartAsPNG`方法,将图表写入到内存流,再转换为Base64编码的字符串,嵌入到...
最后,在JSP页面上,我们可以使用Struts2的标签库来显示生成的图表: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <img src="<s:url action='generateChart'/>" alt="图表"/> ``` 以上就是JFreeChart与...