Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    [Jasper Report & Java] Autentico rompicapo subreport per intenditori

    Carissimi,
    nella mia ormai corposa applicazione JSP sviluppata in Eclipse sono presenti diversi report creati con lo strumento iReport e facenti capo naturalmente alla libreria Jasper Report. Tutti i report presenti nell'applicazione, di diversa foggia e complessità, si aprono in molti modi (pdf, editabile, viewer... Mi sono sbizzarrito).

    Bene, la tragedia che mi tiene sveglio da una trentina di ore (da buon gemelli sapete che sono orgoglioso, quindi prima di postare provo e stra provo) consiste in un reportPadre che contiene il subreport reportFiglio. Singolarmente, i due report si aprono perfettamente sia dall'editor di iReport che tramite servlet dalla mia applicazione. Ma se includo il figlio nel padre (per semplicità, senza legarli da alcun parametro, visto che vorrei "isolare" la natura del problema riducendo le variabili in gioco), l'editor iReport apre tutto perfettamente mentre la mia web application Java non apre nulla e mostra una pagina bianca senza alcun errore.

    Sappiate che:

    1) Compilo perfettamente entrambi i report e li metto nella stessa cartella, secondo un procedimento che avrò eseguito infinite volte e sempre a buon fine;
    2) Ho la sensazione che dipenda dal percorso del report figlio, eppure lo passo come un parametro dal report padre, come suggerito in fase di creazione guidata, e poi da servlet imposto tale parametro con lo stesso percorso del report padre con il codice che posto sotto.

    Sicuramente sbaglio qualcosa, potete aiutarmi in modo da evitarmi la seconda notte consecutiva in bianco? Grazie! Chi di voi ha inglobato nella propria applicazione un report Jasper con un subreport, come si è regolato?

    codice:
    parameters.put("SUBREPORT_DIR", context.getRealPath(rptFolder));
    Archimede

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Problema ancora aperto. Nessuna soluzione? Grazie in anticipo...

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Pazzesco. Ho inserito un post sul forum ufficiale Jasper ma senza esito. Scusatemi tutti per l'insistenza (mi scuso soprattutto con i moderatori, non è mio uso uppare) ma pare che una simile banalità sia proprio un rompicapo. Senza il vostro aiuto non ce la posso fare davvero...

  4. #4
    a leggerti sembrerebbe appunto un problema di percorso, i report padre e figlio sono fisicamente nella stessa cartella? Io metto semplicemente il percorso relativo al report e funziona tutto alla perfezione.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Krakovia,
    grazie per la tua gentilissima (e provvidenziale, avrà qualche nesso col tuo nick? Mah! Chi ha orecchie per intendere intenda...) risposta. Dopo due giorni di tentativi ho scoperto che è esattamente come dici tu.

    Ovvero, dopo aver creato e modificato la servlet con ogni foggia e colore mi sono detto "e se dipendesse dal percorso del subreport"?

    Allora ho ripreso la servlet iniziale, nella quale non avevo inserito alcun particolare comando aggiuntivo ma solo il parametro da passare al main report affinché vedesse il sub (ovvero, la sua path), ed ho inserito C:/temp/ (il più semplice in assoluto che mi venisse in mente, indipendente dalla mia web application e dalla sua ubicazione nel tomcat locale, parametro che funziona sempre e che ho sempre usato in molte mie prove). Ho lasciato ovviamente il main report nella cartella report della mia applicazione e collocato il subreport in quella destinazione di prova C:/test/. Bene, tutto funzionava a meraviglia.

    Passo successivo: ho provato ad inserire il sub_report nella cartella report della mia web application. Passando qualsiasi parametro possibile (.//, //, ./, /, /report/, context.getResourceAsStream(rptFolder) e molti altri) non c'è modo di far vedere la corretta ubicazione del subreport. Per maggior chiarezza copio sotto la servlet e formulo il quesito:

    Quale parametro passare al main report affinché veda un sub report collocato nella sua stessa cartella?

    Ecco il frammento della servlet
    codice:
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		String rptFileName = request.getParameter("rptFileName").toString();
    		String rptFolder = "/report/"; 
    		
    		JasperPrint jp2 = null;
    		
    		ServletContext context = this.getServletContext();
    		
    		
    		Map parameters = new HashMap();
    		
                   //nota bene! con il percorso riportato nella riga sottostante e mettendo lì il jasper del subreport tutto funziona bene!
                   //parameters.put("SUBREPORT_DIR", "C:/temp/miaprova/");
    		
    
    //questo invece è il mio tentativo di fargli vedere il subreport collocandolo nella stessa cartella del report principale
    		parameters.put("SUBREPORT_DIR", ".//");
    		
    		String cnHost = "localhost";
    		String cnName = "testdb";
    		String cnLogin = "testuser";
    		String cnPsw = "testpsw";
    		Connection Conn = null; 
    		
    		
    		try {
    			Class.forName("org.postgresql.Driver").newInstance();
    		} catch (InstantiationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		try {
    			Conn = DriverManager.getConnection("jdbc:postgresql://"+cnHost+"/" + cnName + "?user=" + cnLogin + "&password=" + cnPsw);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		try {
    		
    jp2 = JasperFillManager.fillReport(context.getResourceAsStream(rptFolder + "prova2" + ".jasper"), parameters, Conn);
    
    			
    		} catch (JRException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		ServletOutputStream outStream = response.getOutputStream();
    		
    		try {
    			JasperExportManager.exportReportToPdfStream(jp2, outStream);
    			
    		} catch (JRException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}

  6. #6
    hai risolto?
    Alla servlet passa un parametro con stringa vuota,
    il problema mi si è presentato paro paro al tuo perchè non passavo all'interno dei report i parametri in maniera corretta, sta tutto lì

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Krakovia non ho risolto, pur avendoci sbattuto la testa per intere giornate e nottate non ho risolto. Sei la mia unica speranza. Cosa vuoi dire con quella frase? Come dovrei fare? O meglio in che modo dovrei modificare parameters.put("SUBREPORT_DIR", qualchecosa) ?

    Grazie tantissimo in anticipo,

    Archimede

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    RISOLTO!

    Mi trovo infatti in una situazione che ho verificato non essere dipendente dal percorso, che è ora corretto. Grazie... Se puoi dai un'occhiata al mio prossimo post.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.