PDA

Visualizza la versione completa : [JAVA] Ottenere report con jasperreport


global_napoli
17-10-2005, 17:19
Ciao a tutti sto provando a realizzare un report con jasperreports.

Qui sotto ho realizzato la classe che contiene le info per ottenere il report in formato pdf:



package provareport;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;


import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.view.JasperViewer;
import java.sql.DriverManager;

public class cls {
public cls() {
}


public static void funzione(){

Connection conn=null;

try{


// First, load JasperDesign from XML and compile it into JasperReport

JasperDesign jasperDesign = JRXmlLoader.load("ReportSocieta.xml");
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

// Second, create a map of parameters to pass to the report.

Map parameters = new HashMap();
parameters.put("Title", "Lista Societa");


// Third, get a database connection
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@aspire:1521:gianluca", "scott", "tiger");




// Fourth, create JasperPrint using fillReport() method

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);


// You can use JasperPrint to create PDF
JasperExportManager.exportReportToPdfFile(jasperPr int, "EmpDeptReport.pdf");


// Or to view report in the JasperViewer
JasperViewer.viewReport(jasperPrint);


} catch (ClassNotFoundException exc) {
// TODO Auto-generated catch block
exc.printStackTrace();
} catch(JRException exc) {
System.out.println(exc.getMessage());
System.out.println("Errore Classe");
} catch (SQLException ex) {
/** @todo Handle this exception */
System.out.println(ex.getMessage());
}



}

}

Però non sono riuscito a farlo funzionare con le jsp: in particolare devo configurare qualcosa per non avere errori in fase di funzionamento? infatti ho provato a richiamare da jsp (<%cls.funzione();%>) la funzione nella classe però ho ottenuto questi errori:

StandardWrapperValve[debugjsp]: Servlet.service() for servlet debugjsp threw exception

java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester

java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester

at provareport.cls.funzione(cls.java:34)

at org.apache.jsp.jsp1_jsp._jspService(jsp1_jsp.java: 59)

at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:94)

at javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

at org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:321)

at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:292)

at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:236)

at javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:237)

at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:157)

at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:214)

at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)

at org.apache.catalina.core.StandardContextValve.invo keInternal(StandardContextValve.java:198)

at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:152)

at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)

at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:137)

at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104)

at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117)

at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:102)

at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)

at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109)

at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104)

at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)

at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:929)

at org.apache.coyote.tomcat5.CoyoteAdapter.service(Co yoteAdapter.java:160)

at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:799)

at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConnection(Http11Protocol.jav a:705)

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:577)

at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:683)

at java.lang.Thread.run(Thread.java:534)



Premetto che uso jbuilder 2005.

Come posso risolvere il problema?

Ciaoooooo :D

eumene
17-10-2005, 18:53
Ciao

Jasper Report ha la necessità di alcune librerie definite common e realizzate da apache.

Nello specifico ti serve il common-digester.jar e non solo, probabilmente.

Le librerire necessarie sono:

- common-digester-1.7.jar
- itext-1.3.1.jar

Inoltre ti consiglio di utilizzare il JasperViewer per mostrare i tuoi report.

E' una magnifica applicazione e puoi salvare direttamente in pdf, html, csv, xml, jxml ed altri formati.

Colgo anche l'occasione di suggerirti l'utilizzo di iReport 0.5.0 per JasperReport 0.6.7, ottimo editor visuale per disegnare magnifici report ed eseguire dei test di visualizzazione.

Il link del sito ufficiale è http://ireport.sourceforge.net/

Ciao

global_napoli
18-10-2005, 09:21
Ciao eumene, grazie per avermi dati queste importanti info.
Ma da dove posso scaricare le librerire :

- common-digester-1.7.jar
- itext-1.3.1.jar

Non sono riuscito a trovarle.

Grazieeeee :D

eumene
18-10-2005, 10:36
Non vorrei sbagliarmi ma se scarichi i sorgenti dovresti anche trovare le librerie.

Quindi sul sito http://sourceforge.net/ (http://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579&release_id=362896) scaricati la versione con i source.

Ciao

global_napoli
19-10-2005, 09:22
Tutto ok! Sono riuscito a generare un report con jasperreport.
Però adesso stavo tentando di passare al file xml una query dinamica dall'applicazione jsp,anzichè tenerne una statica nel file xml;così ho inserito nel file xml come parametro questo

<parameter name="query" class="java.lang.String"/>
<queryString>query</queryString>

e nel codice dell'applicazione questo:

parameters.put("query", "select nome_societa from tabsocieta");

però mi dà un errore sulla query.
Sai come posso passare da un'applicazione in jsp al template in xml di jasperreports una query dinamicamente anzichè tenerne una statica nel file xml?

Grazie e ciaoooo :D

eumene
19-10-2005, 12:47
Una volta ero capace di farlo, ma adesso non ricordo più nulla.

Ho abbandonato questa scelta da quando ho dovuto iniziare a lavorare con JasperReport come Applet e quindi realizzare query da remoto a database protetti.

Una marea di casini che non ti dico.

Per far funzionare la query, comunque, assicurati che il DataSource passato al Report non sia vuoto, ma bewn definito.

Inoltre, se posso darti un consiglio, responsabilizza oggetti esterni al report che preparino i dati (parametri ed altro) prima di passarli al report, mentre il report è a tutti gli effetti un'entità statica che accetta parametri e template.

Una struttura del genere ti assicura la possibilità di riutilizzare lo stesso codice per differenti report e non ti obbliga a scrivere codice nel report (che rischia di essere dimenticato)

Eumene

global_napoli
19-10-2005, 15:34
Ok grazie cmq per il tuo aiuto non indifferente.

Non c'è nessuno che mi possa aiutare su questo?

Ciaooo :D

Loading