Your SlideShare is downloading. ×
  • Like
Anteprima con flash viewer [by sc]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Anteprima con flash viewer [by sc]

  • 109 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
109
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
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>