2010-04-21 16 views
7

Vorrei passare come parametro al mio .jrxml un oggetto arbitrario del mio dominio, ad esempio una persona.Come posso passare un oggetto arbitrario a jasper report come parametro?

InputStream reportFile = MyPage.this.getClass().getResourceAsStream("test.jrxml"); 
HashMap<String, Person> parameters = new HashMap<String, Person>(); 
parameters.put("person", new Person("John", "Doe")); 
... 
JasperReport report = JasperCompileManager.compileReport(reportFile); 
JasperPrint print = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 
return JasperExportManager.exportReportToPdf(print); 

E sul .jrxml fare qualcosa come:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
<property name="ireport.zoom" value="1.0"/> 
<property name="ireport.x" value="0"/> 
<property name="ireport.y" value="0"/> 
<parameter name="PERSON" isForPrompting="false" class="myApp.domain.person"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<title> 
    <band height="20"> 
     <staticText> 
     <reportElement x="180" y="0" width="200" height="20"/> 
     <text><![CDATA[$P{PERSON.lastName}]]></text> 
     </staticText> 
    </band> 
</title> 
... 

è qualcosa di simile possibile? Dove posso trovare tutorial più complessi che mostrano più di un semplice passaggio a java.lang.String?

Grazie

risposta

7

Sì, è possibile passare qualsiasi oggetto Java, ma è necessario assicurarsi di importare quell'oggetto nel JRXML.

All'interno del tag jasperReport. È possibile utilizzare il tag import, come:

<jasperReport...> 
     <import value="org.justfortest.Person"> 

Tuttavia, è possibile utilizzare JRBeanCollectionDataSource e popolare il report con un elenco del vostro oggetto, senza bisogno di memorizzare oggetti arbitrari nella mappa params.

Controllare questo tutorial per più informazioni Jasper Reports Bean Collection Data Source

+1

Il collegamento è interrotto. –

0

Sì, è possibile esattamente come spiegato. Assicurati di avere il classpath corretto durante la compilazione di jrxml e fai attenzione al caso: o minuscolo (person) o maiuscolo (PERSON) in tutte le posizioni.

+0

Grazie, quello che se non si vuole impostare un particolare percorso di classe, che può mettere in qualcosa di .jrxml come o qualcosa come quello per il rapporto di essere in grado di trovare una classe particolare? Grazie ancora per il tuo aiuto! –

+0

Penso che tu possa usare l'importazione. Assicurati di segnalare se il tuo tentativo ha avuto successo. – Bozho

+0

Questione molto pertinente, sei riuscito a risolverlo? Affrontando esattamente gli stessi requisiti, abbiamo bisogno di caricare jrxml sul server jasper e ovviamente non vogliamo aggiungere nulla al percorso classe sul server (non facile da aggiornare), allo stesso tempo non vogliamo usare di unità di rapporto ma piuttosto importa direttamente le classi in jrxml. Eventuali suggerimenti? – Aubergine

Problemi correlati