Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/07/2011, 08:36
Pelirr
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: no encuentra url para cargar .jasper

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