Struts2.1.8+JasperReport3.7.1 結合iReport3.7.1報表開發

一、準備
下載iReport3.7.1、JasperReport3.7.1、Struts2.1.8及其他需要的包,需導入包如下圖:

如需生成Excel的話,還需導入poi-3.5.jar包。

二、整合Struts2+JasperReport3
1. 新建以下三個pojo類:
Address

package  com.xy.report.pojo;

public   class  Address {
    
private  String city;
    
private  String zipcode;
    
public  String getCity() {
        
return  city;
    }
    
public   void  setCity(String city) {
        
this .city  =  city;
    }
    
public  String getZipcode() {
        
return  zipcode;
    }
    
public   void  setZipcode(String zipcode) {
        
this .zipcode  =  zipcode;
    }
}

Company

package  com.xy.report.pojo;

import  java.util.HashSet;
import  java.util.Set;

public   class  Company  implements  Comparable < Company > {
    
private  String name;
    
private  Address address;
    
private  Set < Staff >  staffs  =   new  HashSet < Staff > ();
    
    @Override
    
public   int  compareTo(Company o) {
        
return  o.getName().compareTo( this .getName());
    }

    
public  String getName() {
        
return  name;
    }
    
public   void  setName(String name) {
        
this .name  =  name;
    }
    
public  Address getAddress() {
        
return  address;
    }
    
public   void  setAddress(Address address) {
        
this .address  =  address;
    }
    
public  Set < Staff >  getStaffs() {
        
return  staffs;
    }
    
public   void  setStaffs(Set < Staff >  staffs) {
        
this .staffs  =  staffs;
    }

}

Company中compareTo方法用於在報表中排序。
Staff

package  com.xy.report.pojo;

public   class  Staff {
    
private  String name;
    
private  Company company;

    
public  String getName() {
        
return  name;
    }

    
public   void  setName(String name) {
        
this .name  =  name;
    }

    
public  Company getCompany() {
        
return  company;
    }

    
public   void  setCompany(Company company) {
        
this .company  =  company;
    }
    
    
}

以上Address是Company的組件,Company與Staff是一對多關係。

2. 新建Action

package  com.xy.report.action;

import  java.util.ArrayList;
import  java.util.HashMap;
import  java.util.List;
import  java.util.Map;

import  com.opensymphony.xwork2.ActionSupport;
import  com.xy.report.pojo.Address;
import  com.xy.report.pojo.Company;
import  com.xy.report.pojo.Staff;

public   class  DemoAction  extends  ActionSupport{

    
private   static   final   long  serialVersionUID  =   - 5460323122712890562L ;
    
    
private  List < Staff >  list;
    
private  Map < String,Object >  map;
    
    @Override
    
public  String execute(){
        list 
=  getData();
        map 
=  getParameter();
        
        
return  SUCCESS;
    }
    
    
private  List < Staff >  getData(){
        Address address 
=   new  Address();
        address.setCity(
" 上海 " );
        address.setZipcode(
" 201400 " );

        Company company1 
=   new  Company();
        company1.setName(
" 飛利浦 " );
        company1.setAddress(address);
        Company company2 
=   new  Company();
        company2.setName(
" 谷歌 " );
        company2.setAddress(address);

        Staff staff1 
=   new  Staff();
        staff1.setName(
" 張三 " );
        staff1.setCompany(company1);
        Staff staff2 
=   new  Staff();
        staff2.setName(
" 李四 " );
        staff2.setCompany(company2);
        Staff staff3 
=   new  Staff();
        staff3.setName(
" 王五 " );
        staff3.setCompany(company1);
        
        List
< Staff >  list  =   new  ArrayList < Staff > ();
        list.add(staff1);
        list.add(staff2);
        list.add(staff3);
        
        
return  list;
    }
    
    
private  Map < String,Object >  getParameter(){
        Map
< String,Object >  map  =   new  HashMap < String,Object > ();
        map.put(
" date " " 2010-03-12 " );
        
return  map;
    }
    
    
//  getter, setter
     public  List < Staff >  getList() {
        
return  list;
    }
    
public   void  setList(List < Staff >  list) {
        
this .list  =  list;
    }
    
public  Map < String, Object >  getMap() {
        
return  map;
    }
    
public   void  setMap(Map < String, Object >  map) {
        
this .map  =  map;
    }
}

以上list爲提供給報表的數據源,map爲提供給報表的參數,如日期範圍等。struts.xml配置如下:

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"  >
< struts >
    
< include  file ="struts-default.xml" ></ include >
    
    
<!--  報表演示  -->
    
< package  name ="default"  namespace ="/reports"  extends ="struts-default,jasperreports-default" >
        
< action  name ="demoReport"  class ="com.xy.report.action.DemoAction" >
            
< result  name ="success"  type ="jasper" >
                
< param  name ="location" > /reports/demoReport.jasper </ param >
                
< param  name ="dataSource" > list </ param >
                
< param  name ="format" > PDF </ param >
                
< param  name ="reportParameters" > map </ param >
            
</ result >
        
</ action >
    
</ package >
</ struts >

location - 提供利用iReport製作編譯好的報表文件。
dataSource - 數據源
format - 報表輸出格式
reportParameters - 報表參數

三、利用iReport開發報表
1. 新建數據源
打開iReport,點擊下圖像插頭一樣的Report Datasources,彈出對象框中New,選擇"JavaBeans set datasource"後Next,輸入Name爲"demo"後Save,如下兩圖:



2. 增加類路徑
點擊“工具”“選項”,選擇classpath標籤頁,點擊Add Folder,將項目類路徑加入,如下圖路徑爲:C:/Users/linli/Documents/workspace/JSReportDemo /build/classes


3. 新建報表
點擊 create a new report

"Open this Template"後,輸入報表名這裏是demoReport後下一步,繼續完成。

4. 讀取bean屬性
點擊Preview字樣右邊的按鈕設置數據源,在彈出框中選擇"JavaBean Datasource"標籤頁,在Class name中輸入類名,點擊"Read attributes"會列出類中所有屬性。選中所需的屬性,這裏是company和name,點擊對話框中間的"Add selected field(s)"增加到報表字段中。
報表將會按公司分組,所以需先按公司排序,當然這一步也可對struts2提供的數據源list進行處理,這裏使用了報表的Sort功能,所以 Company類必須實現Comparable接口。點擊"Sort options...",增加排序字段。


5. 增加分組
加擊左側Report Inspector中的demoReport,選擇"Add Report Group",在彈出框中輸入分組名,選擇分組字段,如下圖。下一步至完成。


6. 設計報表
將左側Report Inspector中Fields下剛加入的字段託到報表設計器中,取公司名寫成$F{company}.getName(),公司地址 爲$F{company}.getAddress().getCity(),員工姓名爲$F{name}。公司名和公司地址放在Group Header裏,員工姓名放在Detail 1裏。
增加一個Parameters下的REPORT_PARAMETERS_MAP,他相當於一個map,取從struts2中設置的date值的方法 爲$P{REPORT_PARAMETERS_MAP}.get("date")。
組件面板中託"Page X of Y"顯示頁碼。
這裏有一些Title、Summary之類的,可能不需要,直接託到高度爲0了想要就託不出來了。這時在左側Report Inspector中選中想要的項目,在右側"屬性"中輸入Bank height的值就行了。
設計完的報表如下圖:

ps: 設計報表時,如果字段要顯示中文,需修改該字段三個屬性的值,如下圖


7. 編譯報表
點擊工具欄上Preview右邊榔頭一樣的東西,將報表編譯成.jasper文件。

8. 運行報表
將編譯好的demoReport.jasper文件複製到項目WebContent/reports目錄下,啓動容器,瀏覽器下查看報表如下:


項目結構如下:

原文地址:http://www.blogjava.net/linli/archive/2010/03/12/315281.html

發佈了19 篇原創文章 · 獲贊 3 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章