Как передать произвольный объект в отчет jasper в качестве параметра?
Я хотел бы передать в качестве параметра my .jrxml произвольный объект моего домена, e.g человек.
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.ленг.Струна?
спасибо
2 ответов
Да, вы можете передать любой объект Java, но вы должны обязательно импортировать этот объект в JRXML.
внутри тега jasperReport. Вы можете использовать тег import
, например:
<jasperReport...>
<import value="org.justfortest.Person">
однако, вы можете использовать JRBeanCollectionDataSource
и заполните отчет списком вашего объекта, без необходимости хранить произвольные объекты на карте params.
проверить этот учебник для получения дополнительной информации о Jasper Сообщает Источник Данных Сбора Бобов
Да, возможно именно так, как вы объяснили. Просто убедитесь, что у вас есть правильный путь к классам при компиляции jrxml и будьте осторожны с регистром - либо строчными буквами (person
) или в верхнем регистре (PERSON
) во всех местах.