Académique Documents
Professionnel Documents
Culture Documents
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
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
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).
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
Desarrollo
En ésta parte, voy a detallar las clases que vamos a necesitar para implementar un reporte en
JSF.
Clases necesarias
3 / 21
Reportes de JasperReport en JSF
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
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
}
[ … ]
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
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
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
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
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
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
*/
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
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
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
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
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
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
}
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
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
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
fechadesde = Calendar . getInstance (
TimeZone
fechahasta = Calendar . getInstance (
TimeZone
mensaje = "" ;
}
[ … ]
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