SSH2框架

jfreechart整合struts2入门之一2011-01-13 07:51 P.M. 报表,大家都很熟悉吧,如何做一个动态报表,下面这个简单例子让你体会到jfreechart的强大.






代码:
jfree.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>jfree.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<script type="text/javascript" src="jslib/jfree.js"></script>
</head>

<body>
<div>
<font size="3" color="red" style="margin-left: 100px;">请选择季度</font>
<select name="selected" id="selected" οnchange="jfree()">
<option value="1">第一季度</option>
<option value="2">第二季度</option>
<option value="3">第三季度</option>
</select>
</div>
<br>
<div>
<img id="imgs" src="listAction.action"/>
</div>
</body>
</html>
jfree.js代码如下:
function jfree(){
var month = document.getElementById("selected").value;
document.getElementById("imgs").src ="listAction.action?month="+month;
}

JfreeAction.java代码如下:
package jfree.action;

import java.awt.Color;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.TextAnchor;

import jfree.dao.JFreeModelDao;
import jfree.dao.JFreeModelDaoImpl;
import jfree.model.JfreeModel;

import com.opensymphony.xwork2.ActionSupport;

public class JfreeAction extends ActionSupport implements ServletRequestAware{

/**
*
*/
private static final long serialVersionUID = -1211545339874371458L;
private static JFreeModelDao dao = new JFreeModelDaoImpl();
private HttpServletRequest request;
private JFreeChart chart;

public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
@Override
public String execute() throws Exception {
return super.execute();
}
public String dawPic() throws IOException{
String month = request.getParameter("month");
if(month==null){
month = "1";
}
this.chart = getChart(month);
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;

}
public JFreeChart getChart(String month){
List<JfreeModel> list =dao.getModel(month);
double[][] data = new double[4][4];
for(int i=0;i<list.size();i++){
JfreeModel jm = list.get(i);
data[i][0] = jm.getNoteNum();
data[i][1] = jm.getMobileNum();
data[i][2] = jm.getComputerNum();
data[i][3] = jm.getCameraNum();
}
String[] rowKeys = {"笔记本","手机","电脑","数码相机"};
String[] columnKeys = {"北京", "上海", "广州", "深圳"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);
JFreeChart chart = ChartFactory.createBarChart3D("四大城市第"+month+"季度销售统计图 ",
"IT产品",
"销量",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false);
CategoryPlot plot = chart.getCategoryPlot();
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//显示每个柱的数值,并修改该数值的字体属性

BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//默认的数字显示在柱子中,通过如下两句可调整数字的显示
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
//设置每个地区所包含的平行柱的之间距离
//renderer.setItemMargin(0.3);
plot.setRenderer(renderer);
//设置地区、销量的显示位置
plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
return chart;
}
}


Struts.xml配置如下:
<package name="jfree" extends="jfreechart-default">
<action name="listAction" class="jfree.action.JfreeAction" method="dawPic">
<result name="success" type="chart">
<param name="width">500</param>
<param name="height">300</param>
</result>
</action>
</package>


Model层
JfreeModel.java代码如下:
package jfree.model;
public class JfreeModel {
private int id;
private double noteNum; //笔记本销售量
private double cameraNum; //数码相机销售量
private double computerNum; //电脑销售量
private double mobileNum; //手机销售量
private int month; //月份
......//getters setters
}

DAO层
接口JFreeModelDao代码 :
package jfree.dao;

import java.util.List;

import jfree.model.JfreeModel;

public interface JFreeModelDao {
public List<JfreeModel> getModel(String month);

}
实现类JFreeModelDaoImpl.java代码如下:
package jfree.dao;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.jfree.util.UtilHibernate;

import jfree.model.JfreeModel;

public class JFreeModelDaoImpl implements JFreeModelDao {

@SuppressWarnings("unchecked")
public List<JfreeModel> getModel(String month) {
Session session = UtilHibernate.getSession();
List<JfreeModel> list = null;
try {
session.beginTransaction();
String sql = "from JfreeModel where month="+"'"+month+"'";
list = session.createQuery(sql).list();
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
e.printStackTrace();
}finally{
UtilHibernate.closeSession(session);
}
return list;
}
}

service层暂时不用






注意事项:

(1)导入struts2-jfreechart-plugin-2.1.8.1.jar包
(2)action配置是要注意继承jfreechart-default
.......................................................ok!!!


该事例有空会做进一步的开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值