2010-04-21 23 views
7

Me gustaría pasar como parámetro a mi .jrxml un objeto arbitrario de mi dominio, por ejemplo, una Persona.¿Cómo puedo pasar un objeto arbitrario al informe de jaspe como parámetro?

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); 

Y en el .jrxml hacer algo como:

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

Es algo como esto posible? ¿Dónde puedo encontrar tutoriales más complejos que muestren algo más que pasar un java.lang.String?

Gracias

Respuesta

7

Sí, puede pasar cualquier objeto Java, pero debe asegurarse de importar ese objeto en JRXML.

Dentro de la etiqueta jasperReport. Puede utilizar la etiqueta import, como:

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

Sin embargo, puede utilizar JRBeanCollectionDataSource y poblar el informe con una lista de su objeto, sin necesidad de almacenar objetos arbitrarios en el mapa params.

Comprobar este tutorial para obtener más información sobre Jasper Reports Bean Collection Data Source

+1

El enlace está roto. –

0

Sí, es posible exactamente como usted explicó. Solo asegúrese de tener el classpath correcto al compilar el jrxml y tenga cuidado con el caso, ya sea en minúsculas (person) o mayúsculas (PERSON) en todos los lugares.

+0

Gracias, lo que si no desea establecer una ruta de clase en particular, que puede poner en el .jrxml algo así como o algo así para que el informe pueda encontrar una clase en particular? ¡Gracias de nuevo por su ayuda! –

+0

Creo que puedes usar importación. Asegúrese de informar si su intento fue exitoso. – Bozho

+0

Pregunta muy relevante, ¿fue capaz de resolverlo? Frente a exactamente los mismos requisitos, ya que necesitamos subir jrxml a jasper server y obviamente no queremos agregar nada a la ruta de clases en el servidor (no es fácil de actualizar), al mismo tiempo no queremos usar de unidad de informe, pero más bien importar clases en jrxml directamente. ¿Alguna sugerencia? – Aubergine

Cuestiones relacionadas