如何将任意对象作为参数传递给jasper报告?

时间:2010-04-21 14:53:23

标签: java jasper-reports

我想作为参数传递给我的.jrxml我的域的任意对象,例如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);

在.jrxml上执行以下操作:

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

这样的事情可能吗?我在哪里可以找到更复杂的教程,而不仅仅是传递java.lang.String?

由于

2 个答案:

答案 0 :(得分:10)

是的,你可以传递任何Java对象,但是你应该确保在JRXML中导入该对象。

在jasperReport标记内。您可以使用标记import,例如:

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

但是,您可以使用JRBeanCollectionDataSource并使用对象列表填充报表,而无需在参数映射中存储任意对象。

查看本教程以获取有关Jasper Reports Bean Collection Data Source

的更多信息

答案 1 :(得分:0)

是的,这可能与您解释的方式完全一致。在编译jrxml时,只需确保你有正确的类路径,并注意案例 - 在所有地方都是小写(person)或大写(PERSON)。