开发者

How can I pass an arbitrary object to jasper report as parameter?

开发者 https://www.devze.com 2022-12-27 12:11 出处:网络
I would like to pass as a parameter to my .jrxml an arbitrary object of my domain, e.g a Person. InputStream reportFile = MyPage.this.getClass().getResourceAsStream(\"test.jrxml\");

I would like to pass as a parameter to my .jrxml an arbitrary object of my domain, e.g a Person.

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 on the .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>
     <开发者_JAVA技巧/band>
 </title>
...

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

Thanks


Yes, you can pass any Java object, but you should make sure to import that object in the JRXML.

Inside the jasperReport tag. You can use the tag import, like:

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

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

Check this tutorial for more info on Jasper Reports Bean Collection Data Source


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

0

精彩评论

暂无评论...
验证码 换一张
取 消