<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不急不徐,持之以恒。

    http://blog.gopersist.com/

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      24 隨筆 :: 0 文章 :: 52 評論 :: 0 Trackbacks
    一、準備
    下載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目錄下,啟動容器,瀏覽器下查看報表如下:


    項目結構如下:



    posted on 2010-03-12 23:54 老林 閱讀(6351) 評論(8)  編輯  收藏 所屬分類: 報表開發

    評論

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-13 10:04 蕭然
    能不能把源碼貢獻一下。  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發[未登錄] 2010-03-15 09:53 jie
    我現在在用JasperDesign 來動態生成報表
    但是 在設置JRDesignTextField 的pattern 時遇到一個問題
    數據源里的時間 字段是String 類型(yyyyMMddHHmmss), 但是要顯示到報表里需要格式化(yyyy-MM-dd HH:mm:ss) 但是value Expression 只能支持簡單的三目運算符,不能處理String 轉Date 過程 請問這個問題怎么解決呢 ?  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-15 16:24 xy.lin
    @jie
    表達式寫成
    new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new SimpleDateFormat("yyyyMMddhhmmss").parse($P{REPORT_PARAMETERS_MAP}.get("date")))
    試試?  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-15 16:34 xy.lin
    @蕭然
    http://www.brsbox.com/filebox/down/fc/ae665fffd643f8a442a720498d63e1f7  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-16 12:16 久久讀書人
    的的免費的你發給  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-27 13:23 wu
    按照樓主的方式,我弄好了,但是出現亂碼,這是為什么?  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-03-30 08:28 xy.lin
    @wu
    看6.設計報表結尾處的ps  回復  更多評論
      

    # re: Struts2.1.8+JasperReport3.7.1結合iReport3.7.1報表開發 2010-04-09 17:13 QQ:515616805
    向你求助:
    我把*.jasper文件copy到項目少了個px文件,然后頁面找不到文件。
    我應該怎么辦,這個是我的QQ,希望你能幫我,謝謝了  回復  更多評論
      

    主站蜘蛛池模板: fc2成年免费共享视频18| 亚洲精品国产国语| 久久性生大片免费观看性| 国产免费69成人精品视频| 国产AV无码专区亚洲AV琪琪| 成人永久免费高清| 美女免费精品高清毛片在线视| 国产网站免费观看| 日亚毛片免费乱码不卡一区| 亚洲av日韩片在线观看| 丰满妇女做a级毛片免费观看| 久久久久亚洲AV成人网| 手机看片国产免费永久| 久久久婷婷五月亚洲97号色 | 日韩电影免费在线观看| 亚洲成AV人片在线观看无| 一区二区三区观看免费中文视频在线播放| 亚洲AV成人片色在线观看| 亚欧色视频在线观看免费| 亚洲中文字幕AV在天堂| 国产国产人免费视频成69大陆| ww在线观视频免费观看w| 亚洲a在线视频视频| 久九九精品免费视频| 色综合久久精品亚洲国产| 亚洲综合av永久无码精品一区二区| 久久福利青草精品资源站免费| 亚洲欧洲精品久久| 女人18毛片特级一级免费视频| 久久精品免费网站网| 亚洲精品欧洲精品| 免费v片视频在线观看视频| 99视频在线免费观看| 亚洲娇小性xxxx| 国产亚洲精品a在线观看| 亚洲日本在线免费观看| 最好2018中文免费视频| 久久精品国产亚洲AV无码偷窥| 国产美女精品久久久久久久免费| 免费在线看黄网站| 亚洲AV香蕉一区区二区三区|