不急不徐,持之以恒。

          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 老林 閱讀(6352) 評論(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,希望你能幫我,謝謝了  回復  更多評論
            

          主站蜘蛛池模板: 青浦区| 泽州县| 固安县| 连城县| 江川县| 阿勒泰市| 赤峰市| 泰和县| 德州市| 荔浦县| 南澳县| 青州市| 惠安县| 班玛县| 临清市| 宁陕县| 罗源县| 湾仔区| 望奎县| 比如县| 汉沽区| 冷水江市| 府谷县| 张家口市| 祁门县| 福鼎市| 宜州市| 南川市| 普安县| 库车县| 大荔县| 元阳县| 古交市| 博客| 乐东| 攀枝花市| 京山县| 清徐县| 镇原县| 金溪县| 徐州市|