können Sie diese Datenquelle Ausdruck für das Bestehen java.util.List (über den Parameter verwenden zu Unterbericht):
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{seznamPriloh})]]></dataSourceExpression>
Die Arbeitsprobe, Master-Report:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="listParam" class="java.util.List"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["<subreport_dir>"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT id, street, city FROM address]]>
</queryString>
<field name="ID" class="java.lang.Integer"/>
<field name="STREET" class="java.lang.String"/>
<field name="CITY" class="java.lang.String"/>
<detail>
<band height="57" splitType="Stretch">
<frame>
<reportElement x="0" y="0" width="539" height="57"/>
<box>
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<subreport>
<reportElement x="0" y="32" width="523" height="17"/>
<subreportParameter name="cityParam">
<subreportParameterExpression><![CDATA[$F{CITY}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listParam})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport_list_as_param.jasper"]]></subreportExpression>
</subreport>
<textField>
<reportElement x="300" y="0" width="208" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["City: " + $F{CITY}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="200" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["Street: " + $F{STREET}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA["Id: " + $F{ID}]]></textFieldExpression>
</textField>
</frame>
</band>
</detail>
</jasperReport>
Th e subreport:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="cityParam" class="java.lang.String"/>
<field name="id" class="java.lang.Integer"/>
<field name="station" class="java.lang.String"/>
<field name="city" class="java.lang.String"/>
<filterExpression><![CDATA[$F{city}.equals($P{cityParam})]]></filterExpression>
<title>
<band height="39">
<textField>
<reportElement x="220" y="14" width="161" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true" isItalic="true"/>
</textElement>
<textFieldExpression><![CDATA["City param: " + $P{cityParam}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20"/>
<box leftPadding="10"/>
<textElement/>
<textFieldExpression><![CDATA[$F{station}]]></textFieldExpression>
</textField>
</band>
</detail>
<noData>
<band height="50">
<textField>
<reportElement x="220" y="17" width="161" height="20"/>
<box leftPadding="10"/>
<textElement>
<font isBold="true" isItalic="true"/>
</textElement>
<textFieldExpression><![CDATA["No data for city param: " + $P{cityParam}]]></textFieldExpression>
</textField>
</band>
</noData>
</jasperReport>
Der Java-Code für das BestehenListe:
Map<String, Object> params = new HashMap<String, Object>();
List<TestBean> beansList = new ArrayList<TestBean>();
// 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);
Das Ergebnis wird sein (die erzeugten PDF-Datei Ansicht):
Sie können an den Implementierungen von aussehen net.sf.jasperreports.engine.JRDataSource. Die am besten geeignete für Ihren Fall ist: JRBeanCollectionDataSource und JRBeanArrayDataSource. Wie Sie sehen können, sind sie beide Bean-basiert.
Ich glaube, Sie einfach Ihre List<String>
zum List<StringBean>
umwandeln kann.
Oder Sie können Ihre eigenen JRDataSource implementieren.
Ok, müssen Sie sagen, welche Fehler Sie bekommen oder etwas ähnliches. Vielleicht können Sie auch Ihren StackTrace einbeziehen. –
@Vyccus Ich brauche Hilfe mit Basic. Ich gebe Fehler das heißt dann muss ich Feld angeben aber ich weiß jetzt nicht welches. Wenn ich "Wert" versuche, ist es traurig, dass für den Bean-Wert kein Feldwert ist. – Perlos