Inicio Programacion Java Reportes de JasperReport en JSF

Reportes de JasperReport en JSF

Viernes, 15 de Mayo de 2009 01:51 administrador Programación - Java
Usar puntuación: / 1
MaloBueno 
Tweeteame!

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

 

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.

 

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.

 

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
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, EXCEL, RTF}
 
 
 
private ExportOption exportOption;
 
 
 
private final String COMPILE_DIR = "/Reportes/";
 
 
 
public AbstractBaseReportBean() {
 
super();
 
setExportOption(ExportOption.HTML);
 
}
 
 
 
[]

 


 

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
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 AbstractBaseReportBean {
 
 
 
private final String COMPILE_FILE_NAME = "ReporteTicket";
 
private Date fechaDesde;
 
private Date fechaHasta;
 
private String mensaje;
 
 
 
 
 
public ReportesBean() {
 
super();
 
fechaDesde = Calendar.getInstance().getTime();
 
fechaHasta = Calendar.getInstance().getTime();
 
}
 
 
 
[]
 
 
 

 


 

ReportConfigUtil

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
44
45
46
47
48
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
95
96
97
98
99
100
101
102
103
104
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
 
  */
 
 
 
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);
 
 
 
String xmlFileName =
 
jasperFileName.substring(0, jasperFileName.indexOf(".jasper"))+".jrxml";
 
JasperCompileManager.compileReportToFile(xmlFileName);
 
 
 
return true;
 
}catch(Exception e) {
 
e.printStackTrace();
 
return false;
 
}
 
}
 
 
 
[]
 
 

 


ReportesTicketsDataSource

 

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
44
45
46
47
48
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
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 JRDataSource {
 
 
 
private Object[][] data; //{{"","",new Date(),new Date(),"",new Double(0)}};
 
 
 
private int index = -1;
 
 
 
public ReporteTicketsDataSource(Date fechaDesde, Date fechaHasta)
 
throws Exception {
 
super();
 
cargarData(fechaDesde, fechaHasta);
 
}
 
 
 
private void cargarData(Date fechaDesde, Date fechaHasta) throws Exception {
 
// 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);
 
//}
 
 
 
}
 
data = new Object[tics.size()][6];
 
for(int i = 0;i<tics.size();i++){
 
data[i] = tics.get(i);
 
}
 
 
 
}
 
[]
 
 

 


Reporte

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
package web;
 
 
 
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(){
 
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 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


rssfeed Siguenos con tu lector de noticias preferido.
Si te ha gustado este artículo y si crees que lo que está escrito vale la pena compartirlo, entonces compártelo con la comunidad que prefieras mediante los links que están debajo. Gracias por visitarnos.
Email Drucken Favoriten Twitter Facebook Myspace Stumbleupon Digg MR. Wong Technorati aol blogger google reddit YahooWebSzenario
Última actualización el Viernes, 15 de Mayo de 2009 14:36

Escribir un comentario


Código de seguridad
Refescar

follow me twitter

Anuncios

Enlaces

Hosting Positivo Networks


Hosting y Diseño Web Profesional

Quizás también te pueda interesar: