JRBeanCollectionDataSource: Wie zeigt man Daten aus der java.util.List von JavaBean an?

Lesezeit: 5 Minuten

JRBeanCollectionDataSource Wie zeigt man Daten aus der javautilList von JavaBean
Gaohongyan

Mein JavaBean enthält die java.util.List.

Userinfo {
    private String username;
    private String password;
    List<Address> listAddress;
}

So zeigen Sie die Daten davon an Liste in dem Detail Band?

  • Können Sie mir dabei helfen? stackoverflow.com/questions/55262894/…

    – Tomuța Dan Claudiu

    23. März 2019 um 16:12 Uhr

JRBeanCollectionDataSource Wie zeigt man Daten aus der javautilList von JavaBean
Alex K

Hier ist das Arbeitsbeispiel.

Die wichtigsten Punkte dieses Beispiels:

  • Verwendung der _THIS Ausdruck;
  • verwenden Liste (jr:Liste) Komponente hinein Detail Band

Das Code-Snippet zum Generieren des Berichts:

public static void testBuildPdf() {
    try {
        Map<String, Object> params = new HashMap<String, Object>();
        JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDataSource());

        JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static JRDataSource getDataSource() {
    Collection<BeanWithList> coll = new ArrayList<BeanWithList>();
    coll.add(new BeanWithList(Arrays.asList("London", "Paris"), 1));
    coll.add(new BeanWithList(Arrays.asList("London", "Madrid", "Moscow"), 2));
    coll.add(new BeanWithList(Arrays.asList("Rome"), 3));

    return new JRBeanCollectionDataSource(coll);
}

Der JavaBean-Code:

public class BeanWithList {

    // The member's name can be any. The JR engine is using public getter for extracting field's value
    private List<String> cities;
    private Integer id;

    public BeanWithList(List<String> cities, Integer id) {
        this.cities = cities;
        this.id = id;
    }

    // getter should be public    
    public List<String> getCities() {
        return this.cities;
    }

    public Integer getId() {
        return this.id;
    }
}

Die jrxml-Datei:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    <subDataset name="dataset1">
        <field name="city" class="java.lang.String">
            <fieldDescription><![CDATA[_THIS]]></fieldDescription>
        </field>
    </subDataset>
    <field name="id" class="java.lang.Integer"/>
    <field name="cities" class="java.util.Collection"/>
    <title>
        <band height="103" splitType="Stretch">
            <staticText>
                <reportElement x="138" y="28" width="258" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Bean with List sample]]></text>
            </staticText>
        </band>
    </title>
    <columnHeader>
        <band height="20">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true" isUnderline="false"/>
                </textElement>
                <text><![CDATA[Id]]></text>
            </staticText>
            <staticText>
                <reportElement x="100" y="0" width="100" height="20"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true" isUnderline="false"/>
                </textElement>
                <text><![CDATA[City name]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="20"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
            </textField>
            <componentElement>
                <reportElement x="100" y="0" width="400" height="20"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="dataset1">
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{cities})]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="20" width="400">
                        <textField>
                            <reportElement x="0" y="0" width="100" height="20"/>
                            <box leftPadding="10">
                                <topPen lineWidth="1.0"/>
                                <leftPen lineWidth="1.0"/>
                                <bottomPen lineWidth="1.0"/>
                                <rightPen lineWidth="1.0"/>
                            </box>
                            <textElement/>
                            <textFieldExpression><![CDATA[$F{city}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </detail>
</jasperReport>

Das Ergebnis wird sein:

Der resultierende Bericht im PDF-Format


Weitere verwandte Fragen sind: Wie drucke ich eine Liste von Zeichenfolgen, die in einer anderen Liste in iReport enthalten sind? Frage und Übergeben der Liste der Objekte vom primitiven Typ als Datenquelle für die Unterberichtsfrage.

  • Sie haben eine Liste mit Städten, aber im

    nehmen Sie das Feld “Stadt”. es kommt woher?, bitte erklären.

    – Girisch K

    3. Februar 2014 um 13:03 Uhr

  • @GirishK Sehen Sie sich die Felddeklaration in an jrxml Datei

    – Alex K

    3. Februar 2014 um 14:38 Uhr

  • Sie haben „Städte“ als Feldnamen für die Sammlung verwendet, obwohl der tatsächliche Name der Liste in BeanWithList „m_cities“ lautet, außerdem gibt es keinen Verweis auf „Städte“ wie im Element „subDataset“. Wie funktioniert es eigentlich?

    – Michael Assraff

    10. Juni 2017 um 12:48 Uhr


  • @MichaelAssraf Der öffentliche Getter ist public List<String> getCities(). Es bedeutet, dass Sie verwenden können cities Name

    – Alex K

    10. Juni 2017 um 13:03 Uhr


  • Ich habe es in der letzten Bearbeitung auf diese Syntax umgestellt, um es klarer zu machen. Fühlen Sie sich frei, es zurückzusetzen, wenn es Ihnen nicht gefällt.

    – Petter Friberg

    11. Oktober 2018 um 19:33 Uhr

JRBeanCollectionDataSource Wie zeigt man Daten aus der javautilList von JavaBean
Alexander Sale

public void generisiIzvestaj(HttpServletRequest request, HttpServletResponse response) throws Exception { 
        
        List<Predstava> predstave = (List<Predstava>)request.getSession().getAttribute("predstaveR");
    
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(predstave);
        InputStream inputStream = this.getClass().getResourceAsStream("/reports/Predstave.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
        Map<String, Object> params = new HashMap<String, Object>();
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
        inputStream.close();
        
        response.setContentType("application/x-download");
        response.addHeader("Content-disposition", "attachment; filename=PredstaveRezisera.pdf");
        ServletOutputStream out = response.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint,out);

1001530cookie-checkJRBeanCollectionDataSource: Wie zeigt man Daten aus der java.util.List von JavaBean an?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy