Ver Mensaje Individual
  #210 (permalink)  
Antiguo 14/06/2005, 14:02
joaquinalem
 
Fecha de Ingreso: junio-2005
Mensajes: 2
Antigüedad: 19 años, 10 meses
Puntos: 0
Tenes que generarte una clase la impleten la interface JRDataSource

Cita:
Iniciado por llakare
Hola!!!
Primero, muchas gracias a todos los que respondieron (lmflores, patasgreen20 y stavera), ya solucioné mi problema.

Ahora tengo otra duda, estoy trabajando con struts y hibernate para el mapeo a una base relacional. En los códigos de ej. que vi, para usar el método
JasperRunManager.runReportToPdf(...), tengo que pasarle la conexión a la Bd, utilizando el DriverManager y demás...el tema es que en struts eso es transparente porque está todo configurado desde archivos xml, me gustaria saber si se puede hacer de otra forma, tal vez hay otro método para utilizar.
Alguien sabe donde puedo encontrar información sobre la documentación de las clases Jasper como JasperRunManager, por ej. ???
Mi otra consulta es:
Cómo puedo llenar los datos del reporte con los resultados que me dá una clase java??? (supongamos que invoco a un método q me retorna una lista de objetos ), es decir desde la JSP invoco al método y de ahi lleno el reporte.
Lei desde el comienzo del foro, no sé si mi duda se resuelve usando datasource, si alguien tiene un ejemplo, se lo agradeceré.
Desde ya muchas gracias, el foro está muy bueno, y es genial que la gente que sabe dedique parte de su tiempo a contestar y compartir sus conocimientos. Lamentablemente yo no sé lo suficiente como para poder contestar, por ahora :=(
Saludos

llakare

Deberias hacerte una clase que implemente la interface JRDataSource...
Ademas debes implementar los metodos next() y getField() a tu manera. (Usar Reflection o BeanUtils)
A su vez al constructor de esta clase tenes que pasarle la Lista donde estan todos los valores que queres que aparezcan en el Reporte

por Ejemplo:

import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class ReporteDS implements JRDataSource {

private Iterator iterator;
private Object currentValue;
private List data;
private int index=-1;


public ReporteDS(List list) {

this.iterator = list.iterator();
data = list;

}

public boolean next() throws JRException {
index++;
return (index < data.size());
}

public Object getFieldValue(JRField field) throws JRException {
Object r = data.get(index);

try {
String s = field.getName();
return BeanUtils.getProperty(r,s);
} catch (Exception e) {
throw new JRException(e.getMessage());
}

}
}


y en la otra clase donde usas las Clases de Jasper:
bytes = JasperRunManager.runReportToPdf(jasperReport, parameters,
rds);

donde ReporteDS rds = null;
rds = new ReporteDS(list); // list es la lista de Objetos..

Espero haber sido claro....