2012-01-27 14 views
6

Soy nuevo en iReport y tengo que crear un informe en PDF.Un objeto (Java Bean) como origen de datos en iReport (JasperReports)

Con un JavaBean DataSource usted envuelve una matriz (o colección) de JavaBeans pero solo necesito pasar un objeto (solo una instancia de un JavaBean). Quiero decir, tengo que mostrar en mi informe las propiedades de un frijol java.

¿Cómo puedo hacer esto? Estoy un poco confundido, ¿tengo que pasar una matriz con solo un elemento?

+0

Puede encontrar los ejemplos [aquí] (http://jasperreports.sourceforge.net/sample.reference/datasource/index.html#javabeandatasources) –

Respuesta

14

Puede pasar el bean al informe utilizando un JRBeanArrayDataSource o JRBeanCollectionDataSource o puede utilizar el mapa parámetros.

JasperPrint reportPrint = JasperFillManager.fillReport(
     this.getClass().getClassLoader().getResourceAsStream("/report.jasper"), 
      new HashMap<String,Object>(), 
       new JRBeanArrayDataSource(new YourBean[]{yourBean})); 

o

Map<String,Object> params = new HashMap<String,Object>(); 
params.put("yourBean", yourBean); 

JasperPrint reportPrint = JasperFillManager.fillReport(
     this.getClass().getClassLoader().getResourceAsStream("/report.jasper"), 
       params, new JREmptyDataSource()); 
+0

Funciona. Gracias. – ilazgo

+0

¿cómo voy a acceder a la propiedad específica de Bean después de eso? youbean sería un parámetro que entiendo. pero digamos que tiene documentTypes como int [] y quiero mostrar eso en el informe. No estoy listo para obtener eso en el informe a través de campo/parámetro? –

+0

@manocha_ak Puede llamar a '$ P {yourBean} .getDocumentTypes()' o '$ P {yourBean} .getDocumentTypes() [0]' en su informe. El parámetro 'yourBean' debe tener como clase de parámetro' YourBean' en 'iReport'. – dcernahoschi

1

Si desea utilizar las clases predefinidas de Jasper Reports, entonces sí. Las implementaciones predeterminadas de JRAbstractBeanDataSource están limitadas a tratar con matrices o colecciones. Entonces, podrías simplemente crear una matriz de un elemento o una colección de elementos.

La alternativa sería la de poner en práctica su propia versión de JRAbstractBeanDataSource que aplasta los métodos next() y moveFirst(), pero eso no parecer una cantidad ridícula de trabajo que hacer cuando hay una forma recta hacia adelante para conseguir el comportamiento requerido.

0

Incluso si sólo tiene un grano, puede seguir utilizando la fuente de datos colección. En este caso, la colección tendrá solo 1 objeto. Si crea el diseño del informe con la agrupación correcta, este informe puede usarse posteriormente para mostrar varias clases con sus respectivas propiedades.

Cuestiones relacionadas