天天看点

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%>" target="_blank" rel="external nofollow" >

<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!!!

该事例有空会做进一步的开发