2010-04-21 3 views
7

Я хотел бы передать в качестве параметра my.jrxml произвольный объект моего домена, например Person.Как передать произвольный объект в отчет jasper как параметр?

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?

Thanks

ответ

7

Да, вы можете передать любой объект Java, но вы должны обязательно импортировать этот объект в JRXML.

Внутри ярлыка jasperReport. Вы можете использовать тег import, как:

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

Однако, вы можете использовать JRBeanCollectionDataSource и заполнить отчет со списком вашего объекта, без необходимости хранения произвольных объектов на карте Params.

Проверить этот учебник для получения дополнительной информации о Jasper Reports Bean Collection Data Source

+1

Ссылка не работает. –

0

Да, это возможно именно так, как вы объяснили. Просто убедитесь, что у вас есть правильный путь к классу при компиляции jrxml и будьте осторожны с корпусом - либо в нижнем регистре (person), либо в верхнем регистре (PERSON) во всех местах.

+0

Спасибо, что если я не хочу, чтобы установить конкретный путь к классам, я могу поставить в .jrxml что-то вроде <импорта пакета = «..»> или что-то например, чтобы отчет мог найти определенный класс? Еще раз спасибо за вашу помощь! – 2010-04-21 15:12:22

+0

Я думаю, вы можете использовать импорт. Обязательно сообщите, была ли ваша попытка успешной. – Bozho

+0

Очень важный вопрос, смогли ли вы его решить? Опираясь на те же требования, что и нам, чтобы загрузить jrxml на jasper-сервер, и мы, очевидно, не хотим добавлять что-либо к пути класса на сервере (не просто обновить), в то же время мы не хотим использовать единицы отчета, но скорее импортируют классы в jrxml напрямую. Какие-либо предложения? – Aubergine

Смежные вопросы