623-reportesjasperreportjsf

21
Reportes de JasperReport en JSF Escrito por Administrator Viernes, 15 de Mayo de 2009 01:51 Introducción  El implementar un reporte de JasperReport dentro de un JSF es posible, si bien hay que tener en cuenta ciertas consideraciones, se puede realizar con éxito dicho desarrollo.  Definiciones  JasperReport: Herramienta para creación de informes en Java, ver http://es.wikipedia.org/wiki/ JasperReports  JSF: JavaServer Faces ( JSF) es un framework para aplicaciones Java basadas en web http://es.wikipedia.org/wiki/JavaServer_Faces  Herramientas utilizadas  1 / 21

Transcript of 623-reportesjasperreportjsf

Page 1: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

Introducción

 

El implementar un reporte de JasperReport dentro de un JSF es posible, si bien hay que teneren cuenta ciertas consideraciones, se puede realizar con éxito dicho desarrollo.

 

Definiciones

 

JasperReport: Herramienta para creación de informes en Java, ver http://es.wikipedia.org/wiki/JasperReports

 

JSF: JavaServer Faces (JSF) es un framework para aplicaciones Java basadas en web

http://es.wikipedia.org/wiki/JavaServer_Faces

 

Herramientas utilizadas

 

1 / 21

Page 2: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

Eclipse: Para mí el mejor IDE de programación Java www.eclipse.org

iReport: Excelente herramienta para la creación de los reportes de JaspeReport, sencillo ypotente. http://jasperforge.org/plugins/project/project_home.php?group_id=83

MySQL: Como motor de base de datos http://www.mysql.com/ .

 

Manos a la obra

 

Como primer paso se debe tener en cuenta, que para el desarrollo de aplicaciones Desktop enJava NO es necesario seguir este tutorial o ayuda, ya que lo que voy a explicar a continuaciónse aplica solamente a la dificultad de la implementación en Web (JSF).

 

Diseño del reporte

 

Para el diseño del reporte debemos abrir el iReport y crear un nuevo reporte y guardarlo, luegose debe compilar (Build – Compile) y además ejecutar (Build – execute (empty data source), deesta manera obtenemos todos los archivos necesarios para utilizarlos desde Java.

2 / 21

Page 3: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

 

Desarrollo

 

En ésta parte, voy a detallar las clases que vamos a necesitar para implementar un reporte enJSF.

 

Clases necesarias

- AbstratcBaseReportBean.java, esta clase es la ancestra de los Reportes a crear. Posee elacceso al archivo del diseño entre otras utilidades.

- ReportConfigUtil.java, posee procedimientos para exportar y compilar archivos.

- ReportesBean.java, es la clase que contendrá el Reporte en cuestión, como particularidad lescomento que hereda de AbstractBaseReportBean.

- ReportesTicketsDataSource.java, es la clase que obtiene los datos a mostrar. En esteejemplo vamos a obtener un listado de tickets.

- Reporte.java, es la clase a utilizar con el jsp.

- ReporteTicket.jsp, es el jsp (presentación) que muestra el reporte en cuestión.

3 / 21

Page 4: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

 

AbstractBaseReportBean 12345678910111213141516171819202122232425262728293031323334353637383940414243

4 / 21

Page 5: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

44454647 package reporte.bean.common ;   [ … ]   import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;   import reporte.util.ReportConfigUtil;   public abstract class AbstractBaseReportBean { public enum ExportOption { PDF, HTML , EXCEL, RTF }   private ExportOption exportOption;   private final String COMPILE_DIR = "/Reportes/" ;   public AbstractBaseReportBean( ) { super ( ) ;  setExportOption( ExportOption. HTML ) ;

5 / 21

Page 6: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

 }   [ … ]

 

 

ReportesBean

 

1234567891011121314151617181920212223242526

6 / 21

Page 7: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

2728293031323334353637383940414243444546 package reporte.bean.report ;   import java.util.Calendar ; [ … ] import net.sf.jasperreports.engine.JRDataSource; import reporte.bean.common.AbstractBaseReportBean;   public class ReportesBean extends AbstractBaseReportBean {   private final String COMPILE_FILE_NAME = "ReporteTicket" ; private Date fechaDesde ; private Date fechaHasta ; private String mensaje ; 

7 / 21

Page 8: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

    public ReportesBean ( ) { super ( ) ;  fechaDesde = Calendar . getInstance ( ) . getTime ( ) ;  fechaHasta = Calendar . getInstance ( ) . getTime ( ) ; }   [ … ]   

 

 

ReportConfigUtil

123456789101112

8 / 21

Page 9: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

13141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

9 / 21

Page 10: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

5960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104

10 / 21

Page 11: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

105106107108109110111 package reporte.util ;   import java.io.File ; import java.io.PrintWriter ; import java.util.Map ; import javax.servlet.ServletContext; import net.sf.jasperreports.engine.JRAbstractExporter; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;   public class ReportConfigUtil {   /*   * PRIVATE METHODS

11 / 21

Page 12: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

   */   private static void setCompileTempDir ( ServletContext context, String uri ) { System . setProperty ( "jasper.reports.compile.temp",  context. getRealPath ( uri ) ) ; }   /*   * PUBLIC METHODS   */   public static boolean compileReport ( ServletContext context, String compileDir, String filename ) throws JRException { String jasperFileName =  context. getRealPath ( compileDir + filename +".jasper" ) ; File jasperFile = new File ( jasperFileName ) ;   if ( jasperFile. exists ( ) ) { return true ; } try {  setCompileTempDir( context, compileDir ) ;  

12 / 21

Page 13: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

 String xmlFileName =  jasperFileName. substring ( 0 , jasperFileName. indexOf ( ".jasper" ) ) + ".jrxml" ;  JasperCompileManager.compileReportToFile ( xmlFileName ) ;   return true ; } catch ( Exception e ) {  e. printStackTrace ( ) ; return false ; } }   [ … ]  

 

ReportesTicketsDataSource

 

12

13 / 21

Page 14: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

3456789101112131415161718192021222324252627282930313233343536373839404142434445464748

14 / 21

Page 15: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

49505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394

15 / 21

Page 16: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

9596979899100101 package reporte.bean.report ;   import java.util.ArrayList ; import java.util.Collection ; import java.util.Date ; import java.util.Iterator ; import java.util.Vector ; import dominio.DataReporteTicket; import dominio.Ticket ; import dominio.Transaccion ; import proxy.FachadaSis ; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField;   public class ReporteTicketsDataSource implements JRDataSource {   private Object [ ] [ ] data ; //{{"","",new Date(),new Date(),"",new Double(0)}};   private int index = - 1 ;

16 / 21

Page 17: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

   public ReporteTicketsDataSource( Date fechaDesde, Date fechaHasta ) throws Exception { super ( ) ;  cargarData ( fechaDesde, fechaHasta) ; }   private void cargarData (Date fechaDesde, Date fechaHasta ) throwsException { // TODO Auto-generated method stub  FachadaSis fachada = FachadaSis.darInstancia ( ) ;  ArrayList < DataReporteTicket > tickets =  fachada. obtenerReporteTickets ( fechaDesde, fechaHasta) ;  Iterator < DataReporteTicket > it = tickets. iterator ( ) ;  Vector < Object [ ] > tics = new Vector < Object [ ] > ( ) ; while ( it. hasNext ( ) ) {  DataReporteTicket ti = it.next ( ) ; Object [ ] ticket = { ti. getTransaccion ( ) ,ti. getCodigo ( ) ,ti. getHoraInicio ( ) ,ti. getHoraFin ( ) ,ti. getMatricula ( ) , ti. getImporte ( ) } ;  tics. add ( ticket ) ; //}

17 / 21

Page 18: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

   }  data = new Object [ tics. size ( ) ] [ 6 ] ; for ( int i = 0 ; i < tics. size ( ) ; i++ ) {  data [ i ] = tics. get ( i ) ; }   } [ … ]  

 

Reporte 1234567891011121314151617181920

18 / 21

Page 19: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

2122232425262728293031323334353637383940414243444546474849505152535455565758596061   package web ;  

19 / 21

Page 20: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

 import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import java.util.Calendar ; import java.util.Date ; import java.util.HashMap ; import java.util.Map ; import java.util.TimeZone ;   import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.view.JasperViewer;   public class Reporte {   private static Connection conn = null ; private Date fechadesde ; private Date fechahasta ; private String mensaje ; public Reporte ( ) {

20 / 21

Page 21: 623-reportesjasperreportjsf

Reportes de JasperReport en JSF

Escrito por AdministratorViernes, 15 de Mayo de 2009 01:51

  fechadesde = Calendar . getInstance (TimeZone . getDefault ( ) ) . getTime ( ) ;  fechahasta = Calendar . getInstance (TimeZone . getDefault ( ) ) . getTime ( ) ;  mensaje = "" ; } [ … ]

 

Como se ve en el código, básicamente lo que se necesita es establecer un mini Frameworkmediante las clases que se detallaron anteriormente. El jsp solamente acepta los parámetros yse ejecuta el método execute() de la clase ReporteBean.

 

Espero que les sea de ayuda y además les dejo todas las clases y las jsp en el siguientearchivo EjemploJasperReportJSF.zip

21 / 21