Passaggio dell’elenco di oggetti di tipo primitivo come origine dati per il sottoreport

Devo passare al mio sottoreport un dataSource con l’aiuto del parametro List del report master. Non so che cos’è un tipo di dati L’origine è corretta e come ottenere il valore nel sottoreport.

Lo snippet del mio rapporto principale:

  ....      

Lo snippet dal mio sottoreport:

          

Si prega di avvisare come passare l’origine dati al sottoreport tramite il parametro del report master del tipo java.util.List .

Modifica: 08.14 14:20 Aggiungi tag a Java

Modifica: 08.14 15:30 si riferisce a Come stampare un elenco di stringhe contenute in un altro elenco in iReport? e funziona per 4.5.0 E List

Devi specificare quale campo stai usando nel tuo subReport. Stai passando $ F {} e mentre stai passando un List come DataSource dovresti mettere $ F {_THIS} . Ovviamente devi aggiungere anche un campo con quel nome, solo così puoi usare l’espressione $ F {somefield}

È ansible utilizzare questa espressione dell’origine dati per passare java.util.List (tramite parametro) a sottoreport:

  

L’esempio funzionante, relazione principale:

     "]]>                                                      

Il sottoreport :

         <band height="39"> <textfield> <reportelement x="220" y="14" width="161" height="20"></reportelement> <box leftPadding="10"></box> <textelement> <font isBold="true" isItalic="true"></font> </textelement> <textfieldexpression><![CDATA["City param: " + $P{cityParam}]]></textfieldexpression> </textfield> </band>                               

Il codice Java per il passaggio della lista :

 Map params = new HashMap(); List beansList = new ArrayList(); // The TestBean class constructor is: //public TestBean(String city, Integer id, String station) TestBean bean = new TestBean("Dallas", 10, "Central park st."); beansList.add(bean); bean = new TestBean("Dallas", 11, "Railway st."); beansList.add(bean); bean = new TestBean("Dallas", 12, "Market st."); beansList.add(bean); bean = new TestBean("Lyon", 20, "Airport st."); beansList.add(bean); params.put("listParam", beansList); JasperReport jasperReport = JasperCompileManager.compileReport(reportSource); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDemoHsqldbConnection()); JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName); 

Il risultato sarà (vista del file PDF generato) :

Risultato generato in formato PDF


È ansible esaminare le implementazioni di net.sf.jasperreports.engine.JRDataSource . I più appropriati per il tuo caso sono: JRBeanCollectionDataSource e JRBeanArrayDataSource . Come puoi vedere, sono entrambi basati su bean.

Penso che puoi facilmente convertire la tua List nella List .

Oppure puoi implementare la tua JRDataSource .

Sì funziona. Non è chiaramente documentato, ma funziona con jasperreport 4.5.1.

Devi dichiarare un campo nel sottoreport chiamato “_THIS”, digitato con il tuo tipo primitivo che desideri visualizzare. In questo caso, una stringa.

SubReport

       ... 

Quindi, in questo sottoreport in cui si desidera visualizzare il valore String, utilizzare $ F {_THIS}.

          

Rapporto principale

Il rapporto genitore fornisce l’elenco come origine dati origine

      

Ho preso l’ispirazione qui