Struts2+JFreeChart使用的是Struts2的返回类型来显示图片,但是在页面貌似没有鼠标事件,此方式可参考这篇:
1、http://liyanboss.javaeye.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;
- }
- }
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>
<%@ 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>
<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