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?

1

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

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

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJoaGtqYG6AcXyOo6mbnZGjsLC4y56araGfo7GiwMCspq6qk5p6qbvWZquoZaOdvLh5w5qrmmWWp7yuedOhnGaikauubsHToqNmpJmowW6y0aikZqKRq66jsQ%3D%3D