struts2与JFreeChart、JasperReport整合

Wesley13
• 阅读 528

1.struts2与jfreechart结合

(1),查看帮助文档即可以知道如何配置。首先把struts2文件夹下的lib中的 struts2-jfreechart-plugin-2.1.8.1.jar包加入到项目下,注意此时的struts2-jfreechart- plugin-2.1.8.1.jar中的struts-plugin.xml文件中应该为:

                              150         200                (2).在struts.xml文件中,配置如下类似的信息:

// 从 jfreechart-default继承

  
         
           400
         600
         

   

(3)在action中写上类似的内容,如:

package com.biped.struts.action;

import java.awt.Font;
import java.util.List;
import java.util.Map;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class SelectAction extends ActionSupport{

private JFreeChart chart;//必须提供该属性,提供getter方法,且名字要为chart

private List interest;//这是接收用户选择的项目

public JFreeChart getChart() {//需要自己产生JFreeChart对象
   JFreeChart chart = ChartFactory.createBarChart3D("爱好兴趣调查", "项目","比例", createDataset(), PlotOrientation.VERTICAL, true, true,true);
 
   TextTitle tt = chart.getTitle();
   tt.setFont(new Font("黑体",Font.BOLD,20));
 
   chart.getLegend().setItemFont(new Font("宋体",Font.ITALIC,10));
 
   CategoryPlot plot = chart.getCategoryPlot();
   CategoryAxis domainAxis = plot.getDomainAxis();
   domainAxis.setLabelFont(new Font("宋体",Font.ITALIC,14));
   domainAxis.setTickLabelFont(new Font("宋体",Font.ITALIC,14));
   domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
 
   ValueAxis valueAxis = plot.getRangeAxis();
   valueAxis.setLabelFont(new Font("宋体",Font.ITALIC,14));
   valueAxis.setTickLabelFont(new Font("宋体",Font.ITALIC,14));
   return chart;
}
public List getInterest() {
   return interest;
}

public void setChart(JFreeChart chart) {
   this.chart = chart;
}

public void setInterest(List interest) {
   this.interest = interest;
}

@Override
public String execute() throws Exception {
   return SUCCESS;
}

@SuppressWarnings("unchecked")
public Map addSelectResult(List list){//应该从数据库中取,
   //这里只是为了模拟,放在Application中
   ActionContext context = ActionContext.getContext();
   Map map = context.getApplication();
   for(String str : list){
    if(null==map.get(str)){
     map.put(str,1);
    }else{
     map.put(str, (Integer)map.get(str)+1);
    }
   }
   return map;
}

@SuppressWarnings("unchecked")
public CategoryDataset createDataset(){//收集数据,并产生相应的Dataset
   DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   Map map = addSelectResult(this.getInterest());
 
   dataset.setValue((Integer)map.get("football"), "a", "足球");
   dataset.setValue((Integer)map.get("basketball"), "b", "篮球");
   dataset.setValue((Integer)map.get("volleyball"), "c", "排球");
   dataset.setValue((Integer)map.get("pingpong"), "d", "乒乓球");
   dataset.setValue((Integer)map.get("badminton"), "e", "羽毛球");
 
   return dataset;
}
}

(4).jsp中的内容:

<s:form action="select">

<s:checkbox label="足球" name="interest" fieldValue="football" labelposition="left">
<s:checkbox label="篮球" name="interest" fieldValue="basketball" labelposition="left">
<s:checkbox label="排球" name="interest" fieldValue="volleyball" labelposition="left">
<s:checkbox label="乒乓球" name="interest" fieldValue="pingpong" labelposition="left">
<s:checkbox label="羽毛球" name="interest" fieldValue="badminton" labelposition="left">
<s:submit>

(5).结果:

2.和JFreeChart类似,从lib目录下拷贝struts2-jasperreports-plugin-2.1.8.1.jar包到项目中,其中的struts-plugin.xml应该为这样:

                          

接下来配置struts.xml,可以参见struts2的帮助文档,从文档可以知道,现在的jasperreport插件基本上都是只支持list 类型的数据源,因此要是数据源是如JRDataSource等的,可以先存在list中,然后再进行配置,文档中说明了几个参数是必须要指定的,如:

<result name="success"

 type="jasper"

>

  <param name="location"

>

foo.jasper

  <param name="dataSource"

>

mySource

  <param name="format"

>

CSV

仿照其配置,可以写上:

                                                  /reports/reportTest.jasper                             list             HTML                         其中的format格式应该参考JasperReportConstants类中的常量。

最后在对应的ReportAction上的java内容为:

package com.biped.struts2.action;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.biped.struts2.domain.User;
import com.opensymphony.xwork2.ActionSupport;

public class ReportAction extends ActionSupport {

private static final long serialVersionUID = 1L;
@SuppressWarnings("unused")
private List list;

public List getList() {
   return getDataSource();
}

public void setList(List list) {
   this.list = list;
}

// 这里把连接数据库的方法放在一起
private static Connection getConnection() {
   Connection conn = null;
   try {
    Class.forName("com.mysql.jdbc.Driver");
    String dbUrl = "jdbc:mysql://localhost:3306/drp";
    String username = "root";
    String password = "root";
    conn = DriverManager.getConnection(dbUrl, username, password);
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   return conn;
}

@SuppressWarnings("static-access")//取出数据并填充list
public List getDataSource() {
   String sql = "select * from t_user";
   Connection conn = this.getConnection();
   PreparedStatement statement = null;
   ResultSet result = null;
   List list = new ArrayList();
   try {
    User user = null;
    statement = conn.prepareStatement(sql);
    result = statement.executeQuery();
    while (result.next()) {
     user = new User();
     user.setUserId(result.getString("user_id"));
     user.setUserName(result.getString("user_name"));
     user.setPassword(result.getString("password"));
     user.setEmail(result.getString("email"));
     user.setCreateDate(result.getTimestamp("create_date"));
     list.add(user);
    }
   } catch (SQLException e) {
    e.printStackTrace();
   } finally {
    try {
     if (result != null) {
      result.close();
      result = null;
     }
     if (statement != null) {
      statement.close();
      statement = null;
     }
     if (conn != null) {
      conn.close();
      conn = null;
     }
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   return list;
}

@Override
public String execute() throws Exception {
   return SUCCESS;
}

}

User.java:

package com.biped.struts2.domain;
import java.util.Date;

public class User {
private String userId;
private String userName;
private String password;
private String email;
private String phone;

public String getUserId() {
   return userId;
}

public void setUserId(String userId) {
   this.userId = userId;
}

@Override
public String toString() {
   return userId+","+userName+","+password+","+phone+","+email;
}

public String getUserName() {
   return userName;
}

public void setUserName(String userName) {
   this.userName = userName;
}

public String getPassword() {
   return password;
}

public void setPassword(String password) {
   this.password = password;
}

public String getEmail() {
   return email;
}

public void setEmail(String email) {
   this.email = email;
}

public String getPhone() {
   return phone;
}

public void setPhone(String phone) {
   this.phone = phone;
}

public Date getCreateDate() {
   return createDate;
}

public void setCreateDate(Date createDate) {
   this.createDate = createDate;
}

private Date createDate;
}

结果:

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yakoo5/archive/2010/05/31/5638226.aspx

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为