Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JRBeanCollectionDataSource: How to show data from the java.util.List from JavaBean?

My JavaBean contains the java.util.List.

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

How to show the data of this List in the Detail band?

like image 748
Gaohongyan Avatar asked Aug 31 '12 05:08

Gaohongyan


1 Answers

Here is the working sample.

The key points of this sample:

  • using of the _THIS expression;
  • using List (jr:list) component in Detail band

The snippet of code for generating report:

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

The 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;     } } 

The jrxml file:

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

The result will be:

The resulting report in PDF format


Other related questions are the How do I print a list of strings contained within another list in iReport? question and Passing the List of primitive type objects as datasource for subreport question.

like image 139
Alex K Avatar answered Sep 25 '22 10:09

Alex K