Lo que ahora no encuentro es la manera de ver ese informe en mi jsp. La idea del proyecto es mostrar el informe dentro de una jsp, pero no sé como hacerlo. He probado a hacer una llamada ajax en la jsp, para obtener el informe y meterlo dentro de un <div> de la jsp, pero no encuentro la manera de meter el informe que me devuelve el action en la jsp. Había probado poner lo siguiente en el action al que llamo en la consulta ajax, y devolver el resultado como código html:
Código:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
import net.sf.jasperreports.engine.JRException;
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.engine.util.JRLoader;
import net.sf.jasperreports.view.JRViewer;
public class OperacionesDiariasReportAction extends OperacionesDiariasActionBase
{
private static final long serialVersionUID = 3478522837934206313L;
private Collection<String> errorsList = new ArrayList<String>();
private javax.swing.JPanel viewerPanel;
public Collection<String> getErrorsList() {
return errorsList;
}
public void setErrorsList(Collection<String> errorsList) {
this.errorsList = errorsList;
}
protected void loadSession() {
backedBeanInforme.setPermissionsMask(chargePermissionsMask());
}
@SuppressWarnings("unchecked")
public String execute()
{
loadSession();
//conecta con la bbdd
Connection connection = null;
boolean error = false;
Properties properties = new Properties();
String driver = "";
String url = "";
String user = "";
String password = "";
try
{
properties.load (this.getClass().getClassLoader().getResourceAsStream("es/indra/aodb/informes/web/action/informes/reportProperties/Report.properties"));
//properties.getClass().getResourceAsStream("es/indra/aodb/informes/web/action/informes/reportProperties/Report.properties"));
driver = properties.getProperty("driverJasperReport");
url = properties.getProperty("urlJasperReport");
user = properties.getProperty("userJasperReport");
password = properties.getProperty("passwordJasperReport");
}
catch (FileNotFoundException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
}
catch (IOException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
}
try
{
connection = DriverManager.getConnection(url, user, password);
}
catch (SQLException e)
{
logger.debug("Error al conectar con DS de informes: " + e.getMessage());
this.addActionError("Error al conectar con DS de informes: " + e.getMessage());
error = true;
e.printStackTrace();
}
JasperPrint jasperPrint = null;
//String filename = "/es/indra/aodb/informes/web/informes/etc/ListadoOperacionesDiarias.jasper"; segun internet
JasperReport listadoDiarioOperacionesJasperReport = null;
HashMap parameters = new HashMap();
parameters.put("tituloInforme", getText("reportTitleDailyOperations"));
parameters.put("compania", getText("reportTextAirline"));
parameters.put("numeroVuelo", getText("reportTextFlightNumber"));
parameters.put("fechaProgramada", getText("reportTextScheduledDate"));
parameters.put("estadoActual", getText("reportTextStatus"));
parameters.put("tipoVuelo", getText("reportFlightType"));
parameters.put("tipoAeronave", getText("reportAircraftType"));
parameters.put("numeroAsientos", getText("reportNumberSeats"));
parameters.put("numeroPasajeros", getText("reportNumberPassenger"));
parameters.put("ocupacion", getText("reportOccupancy"));
SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
try
{
Date fechaInformeDesde = backedBeanInforme.getReportDate();
String fechaString = backedBeanInforme.getReportDateString();
Date fechaInformeHasta = formatoFecha.parse(fechaString + " 23:59:59");
parameters.put("fechaInformeDesde", fechaInformeDesde);
parameters.put("fechaInformeHasta", fechaInformeHasta);
}
catch (ParseException e) {
logger.error("No se han transformado bien las fechas desde y hasta de informe");
this.addActionError("No se han transformado bien las fechas desde y hasta de informe");
error = true;
e.printStackTrace();
}
try
{
//jasperPrint = JasperFillManager.fillReport(filename, parameters, connection); segun internet
listadoDiarioOperacionesJasperReport = (JasperReport) JRLoader.loadObject(this.getClass().getClassLoader().getResourceAsStream("es/indra/aodb/informes/web/action/informes/reportsJasper/ListadoOperacionesDiarias.jasper"));
jasperPrint = JasperFillManager.fillReport(listadoDiarioOperacionesJasperReport, parameters, connection);
if (jasperPrint != null)
{
logger.debug("Se va a mostrar el informe");
//montar informe en JasperViewer y mostrar en el modulo de informes
JRViewer viewer = new JRViewer(jasperPrint);
logger.debug("Informe mostrado");
JasperExportManager.exportReportToHtmlFile(jasperPrint, "C:/Documents and Settings/empalacios/Proyectos/workspaceAODB/ProbandoNuevaAODB/informes/web/jsp/informes/_loadInforme.jsp");
logger.debug("informe descargado");
}
else
{
logger.error("No se ha generado el informe correctamente");
this.addActionError("No se ha generado el informe correctamente");
error = true;
}
}
catch (JRException e1)
{
logger.debug(e1);
this.addActionError(e1.getMessage()); //cambiar los mensajes de error
error = true;
e1.printStackTrace();
}
if (error == true)
{
errorsList = this.getActionErrors();
return "ERROR";
}
else
{
return "SUCCESS";
}
}
public void validate()
{
}
}
y se supone que el informe debería meterse en la jsp _loadInforme.jsp. No quiero que se abra el informe en un fichero aparte, sino en mi jsp. Pero no sé como hacerlo, así no me funciona, aparte que la dirección url de la jsp no valdría (debe referirse a la del proyecto, no a la de mi ordenador), pero si le pongo la que debería valer:
/jsp/informes/_loadInforme.jsp
me dá un error.
He visto algo parecido a lo siguiente:
Código:
jrViewer=new JRViewer(jasperPrint);
jrViewer.setBounds(10,40,620,400);
this.getContentPane().add(jrViewer);
this.setVisible(true);
pero luego, ¿como introduzco el ContentPane() en la jsp? La verdad es que nunca lo he utilizado. Si pudieras aunque sea dirigirme un poco, te lo agradecería.
A lo mejor es que no puedo utilizar la consulta Ajax. Pero entonces, utilizo un action, un servlet... como ves ando un poco perdida.
Muchas gracias, un saludo