Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] reporte y subreporte en jasper e ireport y jsp con datasoruce de arraylist

Estas en el tema de reporte y subreporte en jasper e ireport y jsp con datasoruce de arraylist en el foro de Java en Foros del Web. hola. La solicitud de ayuda es para ver si alguien puede orientarme con lo siguiente, tengo que crear un datasource que tiene un arraylist de ...
  #1 (permalink)  
Antiguo 26/02/2013, 22:09
 
Fecha de Ingreso: febrero-2011
Mensajes: 15
Antigüedad: 13 años, 9 meses
Puntos: 0
Pregunta reporte y subreporte en jasper e ireport y jsp con datasoruce de arraylist

hola.

La solicitud de ayuda es para ver si alguien puede orientarme con lo siguiente, tengo que crear un datasource que tiene un arraylist de hashmap donde va la informacion este array debe llegar al subreporte y he buscado pero no se como hacerlo.

aca tengo un codigo con el que en la jsp creo el datasource (no se si este bien).
Código:
        //////datasource jasper
        ArrayList listaMaestro = new ArrayList();
        int i = 0;
        Map parameters = new HashMap();
        parameters.clear();
        parameters.put("logo", this.getClass().getResourceAsStream(logotipo));
        parameters.put("CC", "prueba pdf");
        parameters.put("referencia", "otra valor");
        parameters.put("i", new Integer(i));
        
        listaMaestro.add(parameters);
        JRMapCollectionDataSource dataSource;
        Collection reportRows = listaMaestro;

        dataSource = new JRMapCollectionDataSource(reportRows);
        ///creo el data source
Aca tengo el codigo del array que envio como parametro y que contiene el hasmap que quiero pintar en el subreporte y enivo los datos al reporte padre
Código:
        Map dos = new HashMap();//datos que quiero pasar al subreporte
        dos.put("uno", "un valor");
        dos.put("dos", "dos valor");
        ArrayList sub = new ArrayList();
        sub.add(dos);
        Collection subdos = sub;
        Map enviar = new HashMap();
        enviar.put("subdos", subdos);
        ///
        File reportFile = new File(application.getRealPath("/taller4/reporte/report1.jasper"));
        String dir = reportFile.getPath().toString();

        byte[] bytes = null;
        try {
            bytes = JasperRunManager.runReportToPdf(dir, enviar, dataSource);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        response.setContentLength(bytes.length);
        ServletOutputStream ouputStream = response.getOutputStream();
        ouputStream.write(bytes, 0, bytes.length);
        ouputStream.flush();
        ouputStream.close();
y por ultimo en el ireport del reporte padre al hijo le digo que la coneccion es "Use datasource expression" y en Datasurce expression "new net.sf.jasperreports.engine.data.JRMapCollectionDa taSource($P{subdos})"...
Pregunta... Esta bien enviar el parametro de esta manera al subreporte o como se hace??(soy nuevo en esto)
Como recibiria este parametro en el subreporte?? y como lo utilizo para pintarlo.
he buscado bastante en la red pero no he encontrado la solucion.

si hay algun error o una mejor forma de hacerlo o correcta les agradeceria me orientaran.

saludos.
  #2 (permalink)  
Antiguo 28/02/2013, 08:51
 
Fecha de Ingreso: febrero-2011
Mensajes: 15
Antigüedad: 13 años, 9 meses
Puntos: 0
De acuerdo Respuesta: reporte y subreporte en jasper e ireport y jsp con datasoruce de arraylist

hola despues de mucho buscar he dado con el problema y a continuación os dejo la solución que encontre por si a otra persona le pueda servir.

El codigo del datasource esta bien y puedo recuoperar los datos por medio de los field pero en el codigo dode envio los datos por el hashmap esta mal configurado, para enviar los datos se debe tener la siguiente estructura:
1)HashMap(donde estan los datos que pintare en el subreporte)
Código:
        Map datos = new HashMap();//datos HM1
        datos.put("uno", "un valor");
        datos.put("dos", "dos valor");
2) incluir el hasmap anterior en un arraylist que en i caso lo llme primerAL
Código:
        ArrayList primerAL = new ArrayList();//AL1
        primer.add(datos);
3) adicionar el arraylist primerAL a otro arraylist
Código:
        ArrayList segundoAL = new ArrayList();//AL2
        segundoAL.add(primerAL);
4) crear un objeto collection con el segundo arraylist "segundoAL"
Código:
        Collection subdos = segundoAL;
5) agregar la coleccion al hasmap que se colocara como parametro para enviar los datos al reporte
Código:
        Map enviar = new HashMap();
        enviar.put("subdos", subdos);
Es un poco engorroso pero funciono de esta manera envio los datos por un datasource sin necesidad de que mi reporte se conecte con la base de datos directamente.

Etiquetas: arraylist, ireport, jasper, jsp, reporte, servlet, string, subreporte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:16.