2012-07-17 35 views
9

Estoy usando JasperReport e ireport en mi aplicación JSF para generar informes sobre la marcha. Esto es lo que yo estoy tratando de lograr: -Creando/Pasando Java Bean Datasource en JasperReport

  1. Mi estructura (que se lee HashMap/ArrayList) contiene los datos que necesita ser aprobado el informe de manera que la misma se muestra en el informe.

  2. Mi informe ya contiene una conexión de Datasource con la que estoy obteniendo algún valor de DB y rellenándolo en el informe.

  3. Estoy creando un subinforme para que, para los datos que se deben pasar del código, pueda usar el subinforme e incrustar este subinforme dentro del informe principal.

Mi problema es: - 1. Soy incapaz de pasar la colección (que se lee HashMap/ArrayList) a subinforme a rellenarlo con los datos de mi código.

Estoy absolutamente seguro de que debe haber alguna manera de pasar toda la colección al subinforme para llenarlo y también he intentado crear una conexión de fuente de datos JavaBean, sin embargo, al crear una conexión, dice Falta la entrada classpath.

No puedo agrupar las respectivas clases dentro de un frasco y poner el frasco en la ruta de clases ya que los valores están en constante cambio en la estructura, ....

Puede alguien por favor me guía sobre cómo crear/pasar una java frijol fuente de datos para el informe para que los datos se pueden rellenar ...

amablemente guía ...

parte Actualizado: -

código Java para pasar parámetros a informar y generar el informe: -

public class TestDataSource 
{ 
    public static void main(String[] args) 
    { 

     try { 
      JasperDesign jasperDesign = JRXmlLoader.load("D:\\jasperReports\\subReportDataSource.jrxml"); 
      JasperReport jasperReport =(JasperReport)JasperCompileManager.compileReport(jasperDesign); 
      Map<String,Object> parameters = new HashMap<String,Object>(); 
      parameters.put ("Title",generateCollection()); 

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(generateCollection())); 

      JasperViewer.viewReport(jasperPrint); 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
    } 

    public static ArrayList<PersonBean> generateCollection() 
    { 
     ArrayList<PersonBean> arrlist=new ArrayList<PersonBean>(); 
     arrlist.add(new PersonBean("A", 20)); 
     arrlist.add(new PersonBean("B",30)); 
     arrlist.add(new PersonBean("C",40)); 
     arrlist.add(new PersonBean("D",50)); 
     arrlist.add(new PersonBean("E",40)); 
     arrlist.add(new PersonBean("F",60)); 

     return arrlist; 
    } 

}

Ahora he creado un nuevo informe (informe) .. Dentro de esa coloqué un sub-informe (Sub-Report) .. Se configura el sub-reporte fuente de datos para ser nueva red. sf.jasperreports.engine.data.JRBeanCollectionDataSource ($ P {Title})

Tipo de conexión: -Utilice un tipo de conexión de fuente de datos.

Ahora dentro de mi Sub-Informe Acabo de colocar dos campos estáticos como Nombre y Edad. Cómo informo a mi informe/Subinforme para imprimir el valor presente como valor en hashmap que se está pasando.

Respuesta

7

Si ya tiene un DataSource, puede pasar su Lista/Mapa a través del Mapa param cuando esté llenando su informe.

Map<String, Object> param = new HashMap<String, Object>(); 
param.put("SUB_DATA_SOURCE", yourList); 

JasperFillManager.fillReport(jasperReport, param, 
       new JRBeanCollectionDataSource(yourMainListHere)); 

Hacer que usted tiene que crear un parámetro dentro de su informe principal con el mismo nombre que ha escogido en su parámetro Mapa y también dar a este tipo de Clase (Lista en mi caso).

Que usted tiene que crear su elemento de informe integrado y establecer el tipo de conexión como "Use una fuente de datos de expresión" y dentro de la "Fuente de datos de expresión" se establece lo siguiente:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE}) 
+0

Por favor, encontrar el post..How actualizado ¿Le digo a mi informe/subinforme que imprima los valores que están presentes dentro de la lista de arrays ... No encuentro absolutamente ninguna manera de asociar hashmap a ningún valor en el informe ... Por favor guíe ... – AngelsandDemons

+0

debe crear campos dentro de su subinforme con el mismo nombre que tienen en su bean, luego lo usa con TEXTFIELDS, no con STATICTEXTFIELD (pero tiene que configurar su proveedor de datos como ya le dije) –

+0

@AngelsandDemons, ¿tiene la solución? o no ? si no, así que respóndeme para escribir la solución adecuada para ti. – BinaryMan

Cuestiones relacionadas