<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      24 隨筆 :: 0 文章 :: 52 評論 :: 0 Trackbacks
    一、準(zhǔn)備
    下載iReport3.7.1、JasperReport3.7.1、Struts2.1.8及其他需要的包,需導(dǎo)入包如下圖:

    如需生成Excel的話,還需導(dǎo)入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方法用于在報(bào)表中排序。
    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是一對多關(guān)系。

    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為提供給報(bào)表的數(shù)據(jù)源,map為提供給報(bào)表的參數(shù),如日期范圍等。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>
        
        
    <!-- 報(bào)表演示 -->
        
    <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制作編譯好的報(bào)表文件。
    dataSource - 數(shù)據(jù)源
    format - 報(bào)表輸出格式
    reportParameters - 報(bào)表參數(shù)

    三、利用iReport開發(fā)報(bào)表
    1. 新建數(shù)據(jù)源
    打開iReport,點(diǎn)擊下圖像插頭一樣的Report Datasources,彈出對象框中New,選擇"JavaBeans set datasource"后Next,輸入Name為"demo"后Save,如下兩圖:



    2. 增加類路徑
    點(diǎn)擊“工具”“選項(xiàng)”,選擇classpath標(biāo)簽頁,點(diǎn)擊Add Folder,將項(xiàng)目類路徑加入,如下圖路徑為:C:\Users\linli\Documents\workspace\JSReportDemo\build\classes


    3. 新建報(bào)表
    點(diǎn)擊 create a new report

    "Open this Template"后,輸入報(bào)表名這里是demoReport后下一步,繼續(xù)完成。

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


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


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

    ps: 設(shè)計(jì)報(bào)表時,如果字段要顯示中文,需修改該字段三個屬性的值,如下圖


    7. 編譯報(bào)表
    點(diǎn)擊工具欄上Preview右邊榔頭一樣的東西,將報(bào)表編譯成.jasper文件。

    8. 運(yùn)行報(bào)表
    將編譯好的demoReport.jasper文件復(fù)制到項(xiàng)目WebContent\reports目錄下,啟動容器,瀏覽器下查看報(bào)表如下:


    項(xiàng)目結(jié)構(gòu)如下:



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

    評論

    # re: Struts2.1.8+JasperReport3.7.1結(jié)合iReport3.7.1報(bào)表開發(fā) 2010-03-13 10:04 蕭然
    能不能把源碼貢獻(xiàn)一下。  回復(fù)  更多評論
      

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

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

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

    # re: Struts2.1.8+JasperReport3.7.1結(jié)合iReport3.7.1報(bào)表開發(fā) 2010-03-16 12:16 久久讀書人
    的的免費(fèi)的你發(fā)給  回復(fù)  更多評論
      

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

    # re: Struts2.1.8+JasperReport3.7.1結(jié)合iReport3.7.1報(bào)表開發(fā) 2010-03-30 08:28 xy.lin
    @wu
    看6.設(shè)計(jì)報(bào)表結(jié)尾處的ps  回復(fù)  更多評論
      

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


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产成人免费一区二区三区| 国产成人精品免费视频动漫| 亚洲国产精品久久| www.亚洲色图.com| 国产精品无码一区二区三区免费| 久久精品国产免费| 久久www免费人成看国产片| 亚洲a∨无码一区二区| 亚洲性色AV日韩在线观看| 亚洲日本香蕉视频| 亚洲AV乱码久久精品蜜桃| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 成人免费激情视频| 最近免费中文在线视频| 日本不卡免费新一区二区三区| 精品国产污污免费网站入口在线 | 182tv免费观看在线视频| 182tv免费视频在线观看| 久久国产精品2020免费m3u8| 日本视频在线观看永久免费| 亚洲色欲色欲www| 成人性生交大片免费看无遮挡 | 99热这里有免费国产精品| 黄色片在线免费观看| 国产成人免费网站| 日韩a级毛片免费观看| 亚洲性在线看高清h片| 亚洲第一区香蕉_国产a| 亚洲六月丁香婷婷综合| 亚洲youwu永久无码精品 | 热久久精品免费视频| 国产精品亚洲不卡一区二区三区| 亚洲人成无码网站| 亚洲中文字幕无码爆乳app| 亚洲av无码专区国产不乱码| 亚洲AV无码成人网站在线观看| 全部一级一级毛片免费看| 久久精品国产免费观看| 啊灬啊灬别停啊灬用力啊免费看| 亚洲国产精品无码AAA片| 亚洲一区二区三区免费视频|