How to pass arbitrary object to jasper report as parameter?

I would like to pass an arbitrary object of my domain, for example Person, as the parameter my.jrxml.

InputStream reportFile = MyPage.this.getClass().getResourceAsStream("test.jrxml"); HashMap<String, Person> parameters = new HashMap<String, Person>(); parameters.put("person", new Person("John", "Doe")); ... JasperReport report = JasperCompileManager.compileReport(reportFile); JasperPrint print = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); return JasperExportManager.exportReportToPdf(print); 

And in .jrxml do something like:

 <?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <parameter name="PERSON" isForPrompting="false" class="myApp.domain.person"/> <background> <band splitType="Stretch"/> </background> <title> <band height="20"> <staticText> <reportElement x="180" y="0" width="200" height="20"/> <text><![CDATA[$P{PERSON.lastName}]]></text> </staticText> </band> </title> ... 

Is something like this possible? Where can I find more complex tutorials that show more than just passing java.lang.String?

thanks

+7
java jasper-reports
source share
2 answers

Yes, you can pass any Java object, but you must definitely import this object into JRXML.

Inside the jasperReport tag. You can use the import tag, for example:

  <jasperReport...> <import value="org.justfortest.Person"> 

However, you can use JRBeanCollectionDataSource and populate the report with a list of your object without having to store arbitrary objects in the params map.

More on this Jasper Reports Bean Collection Data Source

+7
source share

Yes, this is possible exactly as you explained. Just make sure you have the correct class path when compiling jrxml and be careful with the case - either lowercase ( person ) or uppercase ( person ) in all places.

0
source share

All Articles