2012-07-17 26 views
9

में जावा बीन डेटासोर्स बनाना/पास करना मैं फ्लाई पर रिपोर्ट जेनरेट करने के लिए अपने जेएसएफ एप्लिकेशन में जैस्पर रिपोर्ट और आईरपोर्ट का उपयोग कर रहा हूं। यह मैं क्या हासिल करने की कोशिश कर रहा हूँ: -जैस्पर रिपोर्ट

  1. मेरे संरचना (HashMap/ArrayList के रूप में पढ़ा) डेटा रिपोर्ट के पारित होने के लिए इतना है कि एक ही रिपोर्ट में दिखाया गया है की जरूरत है शामिल हैं।

  2. मेरी रिपोर्ट में पहले से ही एक डेटास्रोत कनेक्शन है जिसका उपयोग मैं डीबी से कुछ मूल्य प्राप्त कर रहा हूं और रिपोर्ट में इसे पॉप्युलेट कर रहा हूं।

  3. मैं एक सब्रेपोर्ट बना रहा हूं ताकि डेटा से कोड को पारित करने की आवश्यकता हो, मैं सबरेपोर्ट का उपयोग कर सकता हूं और मुख्य रिपोर्ट के अंदर इस सबरेपोर्ट को एम्बेड कर सकता हूं।

मेरे समस्या है: - 1. मैं संग्रह पारित करने में असमर्थ हूँ (HashMap/ArrayList के रूप में पढ़ा) मेरी कोड के डेटा से पॉप्युलेट करने के लिए subreport करने के लिए।

मुझे पूरा यकीन है कि पूरे संग्रह को सबरेपोर्ट में पास करने के लिए इसे पूरा करने के लिए कुछ तरीका होना चाहिए और मैंने एक कनेक्शन बनाने के दौरान जावाबीन डेटासोर्स कनेक्शन बनाने का भी प्रयास किया है, यह क्लासपाथ एंट्री गुम है।

मैं एक जार के अंदर संबंधित वर्गों बंडल नहीं कर सकते और classpath में जार डाल के बाद से मूल्यों लगातार संरचना में बदल रहे हैं, ....

किसी को भी कृपया/कैसे बनाने के लिए मुझे मार्गदर्शन कर सकते हैं एक जावा पारित रिपोर्ट ताकि डेटा से भरा जा सकता करने के लिए सेम डेटा स्रोत ...

कृपया मार्गदर्शन ...

Updated भाग: -

रिपोर्ट करने के लिए पैरामीटर गुजर और रिपोर्ट पैदा करने के लिए

जावा कोड: -

public class TestDataSource 
{ 
    public static void main(String[] args) 
    { 

     try { 
      JasperDesign jasperDesign = JRXmlLoader.load("D:\\jasperReports\\subReportDataSource.jrxml"); 
      JasperReport jasperReport =(JasperReport)JasperCompileManager.compileReport(jasperDesign); 
      Map<String,Object> parameters = new HashMap<String,Object>(); 
      parameters.put ("Title",generateCollection()); 

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(generateCollection())); 

      JasperViewer.viewReport(jasperPrint); 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
    } 

    public static ArrayList<PersonBean> generateCollection() 
    { 
     ArrayList<PersonBean> arrlist=new ArrayList<PersonBean>(); 
     arrlist.add(new PersonBean("A", 20)); 
     arrlist.add(new PersonBean("B",30)); 
     arrlist.add(new PersonBean("C",40)); 
     arrlist.add(new PersonBean("D",50)); 
     arrlist.add(new PersonBean("E",40)); 
     arrlist.add(new PersonBean("F",60)); 

     return arrlist; 
    } 

}

अब मैं एक नई रिपोर्ट (रिपोर्ट) .. कि अंदर मैं एक उप रिपोर्ट (उप-रिपोर्ट) .. कॉन्फ़िगर उप रिपोर्ट डेटा स्रोत नई शुद्ध होने के लिए रखा बनाया। sf.jasperreports.engine.data.JRBeanCollectionDataSource ($ पी {शीर्षक})

कनेक्शन का प्रकार: - डेटासेट कनेक्शन प्रकार का उपयोग करें।

अब मेरी उप-रिपोर्ट के अंदर मैंने नाम और आयु के रूप में दो स्थैतिक फ़ील्ड रखे हैं। मैं अपनी रिपोर्ट/उप-रिपोर्ट को उस मूल्य को प्रिंट करने के लिए कैसे कहूं जो हैशपैप में मान के रूप में प्रस्तुत किया जा रहा है।

उत्तर

7

यदि आपके पास पहले से ही डेटासोर्स है तो आप अपनी रिपोर्ट भरने पर अपनी सूची/मानचित्र को पैरा मानचित्र को पास कर सकते हैं।

Map<String, Object> param = new HashMap<String, Object>(); 
param.put("SUB_DATA_SOURCE", yourList); 

JasperFillManager.fillReport(jasperReport, param, 
       new JRBeanCollectionDataSource(yourMainListHere)); 

करने से आप एक ही नाम आप अपने परम मानचित्र में स्थापित किया है के साथ अपने मुख्य रिपोर्ट के अंदर एक पैरामीटर बनाने के लिए है और यह भी इस के लिए एक प्रकार कक्षा (मेरे मामले में सूची) देना है।

से आप अपने subreport तत्व बना सकते हैं और सेट के रूप में "एक डेटा स्रोत अभिव्यक्ति का उपयोग करें" और "डेटा स्रोत अभिव्यक्ति" क्या आप इस सेट के अंदर कनेक्शन प्रकार है:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE}) 
+0

कृपया अद्यतन post..How लगता है क्या मैं अपनी रिपोर्ट/उप-रिपोर्ट को उन मूल्यों को मुद्रित करने के लिए कहता हूं जो सरणीसूची के अंदर मौजूद हैं .... मुझे हैशप को रिपोर्ट में किसी भी मूल्य से जोड़ने का बिल्कुल कोई तरीका नहीं है ... कृपया मार्गदर्शन करें ... – AngelsandDemons

+0

आपको फ़ील्ड बनाना होगा अपने सबरेपोर्ट के अंदर उसी नाम के साथ जो आपके बीन में है, तो आप इसे टेक्सटाइल्ड के साथ उपयोग करते हैं, न कि STATICTEXTFIELD के साथ (लेकिन आपको अपना डेटाप्रोवाइडर सेट करना होगा जैसा कि मैंने आपको पहले बताया था) –

+0

@AngelsandDemons, क्या आपको समाधान मिला है या नहीं ? यदि नहीं, तो मुझे आपके लिए सही समाधान लिखने के लिए उत्तर दें। – BinaryMan

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^