Vous êtes sur la page 1sur 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
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 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 y


potente. 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 en
Java NO es necesario seguir este tutorial o ayuda, ya que lo que voy a explicar a continuación
se 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, luego
se debe compilar (Build – Compile) y además ejecutar (Build – execute (empty data source), de
esta manera obtenemos todos los archivos necesarios para utilizarlos desde Java.

2 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

Desarrollo

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

Clases necesarias

- AbstratcBaseReportBean.java, esta clase es la ancestra de los Reportes a crear. Posee el


acceso 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 les


comento que hereda de AbstractBaseReportBean.

- ReportesTicketsDataSource.java, es la clase que obtiene los datos a mostrar. En este


ejemplo 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
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

AbstractBaseReportBean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

4 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

44
45
46
47
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
 
 
 
private ExportOption exportOption
;
 
 
 
private final String COMPILE_DIR = "/Reportes/" ;
 
 
 
public AbstractBaseReportBean ( ) {
 
super ( ) ;
 
setExportOption ( ExportOption. HTML ) ;

5 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

 
}
 
 
 
[ … ]

ReportesBean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

6 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package reporte.bean.report ;
 
 
 
import java.util.Calendar ;
 
[ … ]
 
import net.sf.jasperreports.engine.JRDataSource
;
 
import reporte.bean.common.AbstractBaseReportBean
;
 
 
 
public class ReportesBean extends Abstrac
 
 
 
private final String COMPILE_FILE_NAME"ReporteTicket"
= ;
 
private Date fechaDesde ;
 
private Date fechaHasta ;
 
private String mensaje ;
 

7 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

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

ReportConfigUtil

1
2
3
4
5
6
7
8
9
10
11
12

8 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

9 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

10 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

105
106
107
108
109
110
111
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
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

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

12 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

 
String xmlFileName =
 
jasperFileName. substring ( 0 , jasperF
 
JasperCompileManager.
compileReportToFile ( xmlFileName )
 
 
 
return true ;
 
} catch ( Exception e
 
e. printStackTrace ( ) ;
 
return false ;
 
}
 
}
 
 
 
[ … ]
 
 

ReportesTicketsDataSource

1
2

13 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

14 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

15 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

95
96
97
98
99
100
101
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 JRData
 
 
 
private Object [ ] [
 
 
 
private int index = - 1 ;

16 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

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

17 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

 
 
 
}
 
data = new Object [ tics.
 
for ( int i= 0
 
data [ i ] = tics.
 
}
 
 
 
}
 
[ … ]
 
 

Reporte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

18 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
package web ;
 
 

19 / 21
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 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
Reportes de JasperReport en JSF

Escrito por Administrator


Viernes, 15 de Mayo de 2009 01:51

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

Como se ve en el código, básicamente lo que se necesita es establecer un mini Framework


mediante las clases que se detallaron anteriormente. El jsp solamente acepta los parámetros y
se 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 siguiente
archivo EjemploJasperReportJSF.zip

21 / 21

Vous aimerez peut-être aussi