Your SlideShare is downloading. ×
Jasper report   anteprima con flash viewer [bysc]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Jasper report anteprima con flash viewer [bysc]

163

Published on

JasperReport - Anteprima con flash viewer [BySC]

JasperReport - Anteprima con flash viewer [BySC]

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
163
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. COME UTILIZZARE FLASH VIEWER DI JASPERREPORTS <DOWNLOAD E CONFIGURAZIONE> 1) Download del componente jasperreports-flash: jasperreports-flash-4.0.0.swf Questo mostra il report all'utente. -------------------------------------------------------------------------------------------------------------------------http://sourceforge.net/projects/jasperreports/files/ -------------------------------------------------------------------------------------------------------------------------2) Configuarazione del file web xml: Registrare la servlet Xml4SwfServlet. Questa sarà la sorgente dati per il componente flash del punto 1) -------------------------------------------------------------------------------------------------------------------------<servlet> <description>Necessaria per l'anteprima dei report</description> <servlet-name>Xml4SwfServlet</servlet-name> <servletclass>net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Xml4SwfServlet</servlet-name> <url-pattern>/servlets/xml4swf</url-pattern> </servlet-mapping> -------------------------------------------------------------------------------------------------------------------------3) Creare la pagina da utilizzare per l'anteprima. Creare un file preview.html (il nome può essere qualunque e con l'estensione che fa comodo: php, jsp, ...). Con il contenuto riportato di seguito. Salvarlo, ad esempio, nello stesso livello di web-inf. (N.B. Assicurarsi che il parametro FlashVars contenga il percorso corretto per la servlet) -------------------------------------------------------------------------------------------------------------------------<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Preview</title> <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body> <wicket:extend> <CENTER> <TABLE style="WIDTH: 100%; " cellSpacing="0" cellPadding="0" border="0"> <TR> <TD align="center"> <object width="750px" height="800px"> <param name="movie" value="jasperreports-flash-4.0.0.swf"/> <embed src="resources/jasperreports-flash-4.0.0.swf" FlashVars="jrpxml=servlets/xml4swf?&fetchSize=3" width="750px" height="800px"> </embed> </object> </TD> </TR> </TABLE>
  • 2. </CENTER> </wicket:extend> </body> </html> -------------------------------------------------------------------------------------------------------------------------4) Nella stessa cartella della pagina del punto 3) copiare il file jasperreports-flash-4.0.0.swf. Ovviamente può essere messo anche in un'altra cartella ma bisogna modifiare il percorso nella pagina del punto 3). </DOWNLOAD E CONFIGURAZIONE> <USO> L'esempio seguente mostra come avviare l'anteprima mediante servlet. E' facile estrapolare il funzionamento anche per atri framework come jsp, jsf, wicket, ... -------------------------------------------------------------------------------------------------------------------------@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); // Elabora parametri passati (querystring) ... // Riempire il report JasperPrint print= ...; // Recupera la sessione Session session=req.getSession(); // Salva l'oggetto print nella sessione. Questo sarà utilzzato dalla servlet Xml4SwfServlet // per restituire il contenuto al client jasperreports-flash-4.0.0.swf. session.setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print); // Visualizza l'anteprima RequestDispatcher dispatcher=req.getRequestDispatcher("/preview.html"); dispatcher.forward(req, resp); } -------------------------------------------------------------------------------------------------------------------------</USO> <RIEPILOGO DEL FUNZIONAMENTO> 1) Una servlet o una pagina jsp (o altro) Creano il file JasperPring e lo assegnano alla sessione con: session.setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print); 2) La servlet (o anche un'altra pagina) visualizza la pagina preview.html 3) Il componente jasperreports-flash-4.0.0.swf esegue una richiesta alla servlet Xml4SwfServlet. 4) La servlet Xml4SwfServlet crea un file jrpxml (utilizzando JRXmlExporter) del file JasperPrint memorizzato nella sessione e lo restituisce (tramite stream).
  • 3. </RIEPILOGO DEL FUNZIONAMENTO> <PROBLEMI> ________________________________________________________________________________ ________________________________________________________________ IL CLIENT NON VISUALIZZA IL RIQUADRO DEL REPORT: questo può essere dovuto al fatto che il componete FLASH-PLAYER non è installato ________________________________________________________________________________ ________________________________________________________________ IMPEDIRE CACHING PER FLASH VIEWER DI JASPERREPORTS In effetti con la configurazione suddetta (riportata dalla documentazione ufficiale) si presenta il seguente problema: si avvia un report X e successivamente un report Y ma il viewer mostra ancora il report X!!!. Guardando la cache del browser ci si accorge che quando viene fatta una richiesta da parte del componente jasperreports-flash-4.0.0.swf il file jrpxml, restituito dalla servlet Xml4SwfServlet, viene memorizzato in quest'ultima. Tale file verrà quindi utilizzato anche nelle richieste successive da parte del componente flash jasperreports-flash-4.0.0.swf che di conseguenza mostrerà lo stesso contenuto. Per ovviare al problema è necessario impedire che la risposta (file jrpxml) della servlet Xml4SwfServlet venga memorizzata nella servlet. Per fare ciò è sufficiente: 1) estendere la servlet net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet come mostrato di seguito. 2) disabilitarela cache nella risposta 3) Modificare la registrazione della servlet con la nuova: punto 2) in <DOWNLOAD E CONFIGURAZIONE> Sostituendo net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet con com.myapp.servlets.PreviewServlet -------------------------------------------------------------------------------------------------------------------------package com.myapp.servlets; import import import import import java.io.IOException; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet; /** * * @author santi caltabiano */ public class PreviewServlet extends Xml4SwfServlet{ public PreviewServlet() { super(); } @Override protected long getLastModified(HttpServletRequest req) {
  • 4. //long ret=super.getLastModified(req); return -1; } @Override public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Questo elemento non deve essere memorizzato nella cache del browser. Questo impedirà al // componente jasperreports-flash-x.x.x.x.swf di utilizzare la cache. Senza tale accorgimento // Verrà sempre utilizzato lo stesso report anche quando se ne vorrà visulizzare un altro. response.setHeader("Cache-Control", "no-store,no-cache,mustrevalidate"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "0"); super.service(request, response); } } -------------------------------------------------------------------------------------------------------------------------- ________________________________________________________________________________ ________________________________________________________________ </PROBLEMI>

×