2010-04-21 3 views
7

Ich möchte als Parameter an meine .jrxml ein beliebiges Objekt meiner Domäne, z. B. eine Person übergeben.Wie kann ich ein beliebiges Objekt als Parameter an Jaspis-Bericht übergeben?

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); 

Und auf der .jrxml so etwas wie:

<?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> 
... 

so etwas wie dies möglich ist? Wo finde ich komplexere Tutorials, die mehr zeigen als nur die Übergabe eines java.lang.String?

Danke

Antwort

7

Ja, Sie können jedes Java-Objekt übergeben, aber Sie sollten sicherstellen, dass dieses Objekt in JRXML importiert wird.

Innerhalb des Tags jasperReport. Jedoch

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

, können Sie JRBeanCollectionDataSource und füllen Sie den Bericht mit einer Liste des Objekts verwenden, ohne beliebige Objekte in der params Karte speichern zu benötigen: Sie können den Tag import, wie verwenden.

In dieser Anleitung für weitere Informationen auf Jasper Reports Bean Collection Data Source

+1

Die Verbindung ist unterbrochen. –

0

Ja, es ist genau so möglich, wie Sie es erklärt haben. Stellen Sie nur sicher, dass Sie den richtigen Klassenpfad haben, wenn Sie die jrxml kompilieren, und seien Sie vorsichtig mit der Groß- und Kleinschreibung (person) oder Großbuchstaben (PERSON) an allen Stellen.

+0

Danke, was passiert, wenn ich will nicht einen bestimmten Classpath setzen, kann ich setzen in dem .jrxml so etwas wie oder etwas So dass der Bericht eine bestimmte Klasse finden kann? Nochmals vielen Dank für Ihre Hilfe! –

+0

Ich denke, dass Sie importieren können. Achten Sie darauf, zu melden, ob Ihr Versuch erfolgreich war. – Bozho

+0

Sehr relevante Frage, konnten Sie es lösen? Mit genau den gleichen Anforderungen, da wir jrxml auf den Jaspis-Server hochladen müssen und wir natürlich nichts zum Klassenpfad auf dem Server hinzufügen wollen (nicht einfach zu aktualisieren), wollen wir aber auch nicht der Berichtseinheit verwenden Stattdessen importieren Sie Klassen direkt in jrxml. Irgendwelche Vorschläge? – Aubergine