JasperReport Detail bringt null bei Datenübergabe

Status
Nicht offen für weitere Antworten.

Azrahel

Bekanntes Mitglied
Hallo Leute

Ich hab ein kleines Problem an dem ich nun schon 2 Tage kaue, und zwar will ich Reporte generieren. Mit Jasper. Schön und gut, gibt ja auch nen schönen Reportdesigner (IReport) dazu. Kompiliert auch wunderbar, das einlesen klappt und die PDF-Datei wird auch generiert, nur in der erzeugten PDF bekomme ich für hash immer null. Ich hab mich schon gebogen, gedreht und gegoogelt, aber auf die Lösung bin ich nicht gekommen.

Die Daten Übergebe ich dabei so:

Code:
	public void doReport() {
		HashMap parameter = new HashMap(); 
		parameter.put("param", "param");

    	//Prodmittelkopf
		ArrayList<HashMap> al = new ArrayList<HashMap>();
		HashMap<String,String> hm;
		hm = new HashMap<String, String>();
		hm.put("hash", "hash");
		al.add(hm);
		
		try {
			JRMapCollectionDataSource ds = new JRMapCollectionDataSource(al);
			File reportfile = new File(e.getPath()+"/classes/programme/difzep/zeafeik/zeafeik.jasper"); 
			JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportfile.getAbsolutePath()); 
			JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, ds);
		    JasperExportManager.exportReportToPdfFile(jasperPrint, "C:/Dokumente und Einstellungen/User/Desktop/zeafeik.pdf");
		}catch (JRException e) {
		    e.printStackTrace();
		}
    	
    	
	}


Den Code hab ich von der Webseite hier:

www.alexander-merz.com/46.html

und hier der von IReport erzeugte jxrml-code

Code:
<?xml version="1.0" encoding="UTF-8"  ?>

<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
		 name="zeafeik"
		 columnCount="1"
		 printOrder="Vertical"
		 orientation="Portrait"
		 pageWidth="595"
		 pageHeight="842"
		 columnWidth="535"
		 columnSpacing="0"
		 leftMargin="30"
		 rightMargin="30"
		 topMargin="20"
		 bottomMargin="20"
		 whenNoDataType="NoPages"
		 isTitleNewPage="false"
		 isSummaryNewPage="false">
	<property name="ireport.scriptlethandling" value="2" />
	<property name="ireport.encoding" value="UTF-8" />
	<import value="java.util.*" />
	<import value="net.sf.jasperreports.engine.*" />
	<import value="net.sf.jasperreports.engine.data.*" />

	<parameter name="hash" isForPrompting="false" class="java.lang.String"/>
	<parameter name="param" isForPrompting="false" class="java.lang.String"/>

		<background>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</background>
		<title>
			<band height="50"  isSplitAllowed="true" >
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="39"
						y="19"
						width="123"
						height="15"
						key="param"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$P{param}]]></textFieldExpression>
				</textField>
			</band>
		</title>
		<pageHeader>
			<band height="50"  isSplitAllowed="true" >
			</band>
		</pageHeader>
		<columnHeader>
			<band height="30"  isSplitAllowed="true" >
			</band>
		</columnHeader>
		<detail>
			<band height="100"  isSplitAllowed="true" >
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="37"
						y="24"
						width="123"
						height="15"
						key="hash"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$P{hash}]]></textFieldExpression>
				</textField>
			</band>
		</detail>
		<columnFooter>
			<band height="30"  isSplitAllowed="true" >
			</band>
		</columnFooter>
		<pageFooter>
			<band height="50"  isSplitAllowed="true" >
			</band>
		</pageFooter>
		<lastPageFooter>
			<band height="50"  isSplitAllowed="true" >
			</band>
		</lastPageFooter>
		<summary>
			<band height="50"  isSplitAllowed="true" >
			</band>
		</summary>
</jasperReport>

Für Anregungen und Kritik, und vielleicht nen Lösungsansatz wär ich echt dankbar 🙂
 
keine ahnung, ich fülle meine reports immer mit beans.

ich tippe mal nach dem überfliegen dass

Code:
<parameter name="hash" isForPrompting="false" class="java.lang.String"/>

falsch ist, da er hier einen string erwartet. das musst du (wohl) als hashmap deklarieren.
 
Hmm ich denk nicht das es daran hängt, weil der Parameter "param" wird angezeigt, nur was ich als HashMap über die ArrayList in den Report reinschubse kommt als null an.

Ich habs einfach mal versucht und hab die Zeile in
Code:
<parameter name="HashMap" isForPrompting="false" class="java.lang.String"/>
umgebaut, ergebniss ist das selbe :-/

Aber danke für die Mühe 🙂, wenn ich rausfinde was es ist poste ichs hier.
 
Sag mal kannste hier mal bitte so ne bean posten? vielleicht hilft mir das ja weiter 🙂, mir wärs nen Versuch auf jeden Fall wert.
 
Schau mal genau hin, du übergibst Inhalte einmal per Parameter und einmal per Datenquelle:

Code:
...
parameter.put("param", "param");
...
hm.put("hash", "hash"); 
al.add(hm);
...
JRMapCollectionDataSource ds = new JRMapCollectionDataSource(al); 
...
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, ds);

In der Report-Vorlage selbst sagst du dann aber folgendes:

Code:
<parameter name="hash" isForPrompting="false" class="java.lang.String"/>
<parameter name="param" isForPrompting="false" class="java.lang.String"/>

Dabei ist "hash" gar kein Parameter, sondern der Name eines Feldes in der Datenquelle. Na macht es jetzt klick?
Und ja, das

Code:
<![CDATA[$P{hash}]]>

musst du demzufolge auch umbauen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben