Pasar la lista de objetos de tipo primitivo como fuente de datos para el subinforme

Necesito pasar a mi subinforme un dataSource con la ayuda del parámetro List del informe maestro. No sé qué es un tipo de dataSource correcto y cómo obtener valor en el subinforme.

El fragmento de mi informe maestro:

  ....      

El fragmento de mi subinforme:

          

Indique cómo pasar el origen de datos al subinforme a través del parámetro del informe maestro del tipo java.util.List .

Editar: 08.14 14:20 Agregar tags a Java

Editar: 08.14 15:30 se relaciona con ¿Cómo imprimo una lista de cadenas contenidas dentro de otra lista en iReport? y funciona para 4.5.0 y List

Debe especificar qué campo está usando en su subReport. Usted está pasando $ F {} y como está pasando una List como una Fuente de Datos, debe poner $ F {_THIS} . Por supuesto, también debe agregar un campo con ese nombre, solo haciendo eso puede usar la expresión $ F {somefield}

Puede usar esta expresión de origen de datos para pasar java.util.List (a través del parámetro) al subinforme:

  

La muestra de trabajo, informe maestro:

     "]]>                                                      

El subinforme :

         <band height="39"> <textfield> <reportelement x="220" y="14" width="161" height="20"></reportelement> <box leftPadding="10"></box> <textelement> <font isBold="true" isItalic="true"></font> </textelement> <textfieldexpression><![CDATA["City param: " + $P{cityParam}]]></textfieldexpression> </textfield> </band>                               

El código de Java para pasar Lista :

 Map params = new HashMap(); List beansList = new ArrayList(); // The TestBean class constructor is: //public TestBean(String city, Integer id, String station) TestBean bean = new TestBean("Dallas", 10, "Central park st."); beansList.add(bean); bean = new TestBean("Dallas", 11, "Railway st."); beansList.add(bean); bean = new TestBean("Dallas", 12, "Market st."); beansList.add(bean); bean = new TestBean("Lyon", 20, "Airport st."); beansList.add(bean); params.put("listParam", beansList); JasperReport jasperReport = JasperCompileManager.compileReport(reportSource); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDemoHsqldbConnection()); JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName); 

El resultado será (vista del archivo PDF generado) :

Resultado generado en formato PDF


Puede ver las implementaciones de net.sf.jasperreports.engine.JRDataSource . Los más apropiados para su caso son: JRBeanCollectionDataSource y JRBeanArrayDataSource . Como puede ver, ambos están basados ​​en frijoles.

Creo que puede convertir fácilmente su List a List .

O puede implementar su propio JRDataSource .

Si, funciona. No está totalmente documentado, pero funciona con jasperreport 4.5.1.

Debe declarar un campo en su subinforme denominado “_THIS”, escrito con su tipo primitivo que desea mostrar. En este caso, una cadena.

Subinforme

       ... 

Luego, en este subinforme donde desea mostrar el valor de Cadena, simplemente use $ F {_THIS}.

          

Informe principal

El informe principal proporciona la lista como datasourceExpression

      

Me inspiré aquí