IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

utiliser JasperReports avec JSF


Sujet :

JSF Java

  1. #1
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut utiliser JasperReports avec JSF
    Salut tout le monde. Je n'arrive pas à afficher un PDF dans le browser. Est-ce que quelqu'un a un exemple concret, svp?
    J'ai essayé d'appliquer la technique suivante (reprise dans le tutoriel de JasperReports):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public class ReportGenerator {
    
        public void generateReport(ActionEvent event)
    	    throws ClassNotFoundException, SQLException, IOException,
    	    JRException {
    	
    	Connection connection;
    	FacesContext context = FacesContext.getCurrentInstance();
    	HttpServletResponse response = (HttpServletResponse) context
    		.getExternalContext().getResponse();
    	InputStream reportStream = context.getExternalContext()
    		.getResourceAsStream("/src/reports/mysqlReport.jasper");
    
    	ServletOutputStream servletOutputStream = response.getOutputStream();
    	Class.forName("com.mysql.jdbc.Driver");
    	connection = DriverManager
    		.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=pwd");
    	JasperRunManager.runReportToPdfStream(reportStream,
    		servletOutputStream, new HashMap<String, String>(), connection);
    	connection.close();
    	response.setContentType("application/pdf");
    	servletOutputStream.flush();
    	servletOutputStream.close();
        }
    }
    Ma page jsp:
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567891011
     
    <f:view>
    	<h:outputText value="Click on the link below to generate the
    report." />
    	<h:form>
    		<h:commandLink action="generate_report"
    			actionListener="#{reportGenerator.generateReport}">
    			<h:outputText value="Generate Report" />
    		</h:commandLink>
    	</h:form>
    </f:view>
    Mais là ils utilisent MyFaces et avec jsf de SUN_RI cea ne fonctionne pas
    Ca donne l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    GRAVE: Received 'java.lang.NullPointerException' when invoking action listener '#{reportGenerator.generateReport}' for component 'j_id_jsp_320462548_3'
    22-nov.-2007 12:35:42 javax.faces.event.MethodExpressionActionListener processAction
    GRAVE: java.lang.NullPointerException
    	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2264)
    	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2277)
    	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
    ....
    et à la fin ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    22-nov.-2007 12:35:42 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@4e2f0a) threw exception
    javax.faces.FacesException: org.apache.jasper.JasperException: An exception occurred processing JSP page /generate.jsp at line 12
     
    9: <title>Report Generation</title>
    10: </head>
    11: <body>
    12: <f:view>
    13: 	<h:outputText value="Click on the link below to generate the
    14: report." />
    15: 	<h:form>
     
     
    Stacktrace:
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:413)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    ...
    Merci pour l'aide.

  2. #2
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    fais un logging sur la valeur de reportStream apres cette commande:

    InputStream reportStream = context.getExternalContext()
    .getResourceAsStream("/src/reports/mysqlReport.jasper");

  3. #3
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Voici ce que cela a donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    23-nov.-2007 12:09:18 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 1402 ms
    23-nov.-2007 12:09:37 javax.faces.event.MethodExpressionActionListener processAction
    GRAVE: Received 'java.lang.NullPointerException' when invoking action listener '#{reportGenerator.generateReport}' for component 'j_id_jsp_320462548_3'
    23-nov.-2007 12:09:37 javax.faces.event.MethodExpressionActionListener processAction
    GRAVE: java.lang.NullPointerException
    	at beans.ReportGenerator.generateReport(ReportGenerator.java:35)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
    	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88)
    	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
    	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:746)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:368)
    	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
    	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)

  4. #4
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    ce que je voulais dire c'est que tu test si reportStream est null ou non;
    car tu as ici un cull pointer exception.
    et InputStream reportStream = context.getExternalContext()
    .getResourceAsStream("/src/reports/mysqlReport.jasper");
    apres cette commande s'il ne localize pas ton fichier jasper
    cette commande
    JasperRunManager.runReportToPdfStream(reportStream,
    servletOutputStream, new HashMap<String, String>(), connection);
    peut genere un null pointer exception.

  5. #5
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Forcement, j'ai corrigé le path vers le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public void generateReport(ActionEvent event)
    	    throws ClassNotFoundException, SQLException, IOException,
    	    JRException {
     
    	Connection connection;
    	FacesContext context = FacesContext.getCurrentInstance();
    	HttpServletResponse response = (HttpServletResponse) context
    		.getExternalContext().getResponse();
    	InputStream reportStream = context.getExternalContext()
    		.getResourceAsStream("/reports/mysqlReport.jasper");
    	if (reportStream != null) {
    	    System.out.println("Jasper file:" + reportStream.toString());
    	    ServletOutputStream servletOutputStream = response
    		    .getOutputStream();
    	    Class.forName("com.mysql.jdbc.Driver");
    	    connection = DriverManager
    		    .getConnection("jdbc:mysql://localhost:3306/test?user=root&password=pwd);
    	    JasperRunManager.runReportToPdfStream(reportStream,
    		    servletOutputStream, new HashMap<String, String>(),
    		    connection);
    	    connection.close();
    	    response.setContentType("application/pdf");
    	    servletOutputStream.flush();
    	    servletOutputStream.close();
    	} else {
    	    System.err.println("Report stream is null!");
    	}
        }
    Mais cette fois j'ai une autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    INFO: Server startup in 1385 ms
    Jasper file:java.io.ByteArrayInputStream@1c7865b
    23-nov.-2007 14:43:26 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@166c114) threw exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Quand je clique sur le link pour générer un fichier PDF, le browser (interne d'Eclipse) me propose de sauvegarder ma page "generate.jsp" j'espérai d'avoir un fichier PDF ouvert dans le browser, non ?

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    enleve le servletOutputStream.close() et ressaye

  7. #7
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Après le clique j'ai été proposé soit ouvrir "generate" soit savegarder "generate". J'ai du choisir un programme dans la liste (j'ai choisi Adobe Reader) et su voir le contenu du fichier "generate[1].pdf".
    Mais dans la console il y avait cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    INFO: Server startup in 1528 ms
    Jasper file:java.io.ByteArrayInputStream@186dda3
    23-nov.-2007 16:03:04 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@b31a7c) threw exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Ca m'enerve que l'on puisse pas à faire même un simple exemple:

    mon fichier faces-config tout simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <managed-bean>
    		<managed-bean-name>reportGenerator</managed-bean-name>
    		<managed-bean-class>beans.ReportGenerator</managed-bean-class>
    		<managed-bean-scope>request</managed-bean-scope>
    	</managed-bean>
    	<navigation-rule>
    		<display-name>
    		generate</display-name>
    		<from-view-id>
    		/generate.jsp</from-view-id>
    		<navigation-case>
    			<from-outcome>
    			generate_report</from-outcome>
    			<to-view-id>
    			/generate.jsp</to-view-id>
    		</navigation-case>
    	</navigation-rule>
    Une idée, peut être ?

  8. #8
    Membre habitué
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Points : 167
    Points
    167
    Par défaut
    Bonjour,

    J'utilise personnelement des etats ireport dans mes pages jsf est voici mes 2 classes :

    import java.io.File;
    import java.sql.Connection;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.export.JRHtmlExporter;
    import net.sf.jasperreports.engine.export.JRPdfExporter;
    import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
    import net.sf.jasperreports.engine.export.JRRtfExporter;
    import net.sf.jasperreports.engine.export.JRXlsExporter;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;

    public class ReportGenerator
    {
    private Connection jdbcConnection;
    private String format;
    private Map parameters;
    public static String PDF_FORMAT = "pdf";
    public static String HTML_FORMAT = "html";
    public static String RTF_FORMAT = "rtf";
    public static String EXCEL_FORMAT = "xls";
    public ReportGenerator(Connection jdbcConnection1, String format)
    {

    this.format = null;
    parameters = null;
    jdbcConnection = jdbcConnection1;
    this.format = format;
    }

    public void showInBrowser(File fichier, HttpServletResponse out)

    {
    try
    {
    // parameters.put("paramunite","11%");
    ServletOutputStream out2 = out.getOutputStream();
    net.sf.jasperreports.engine.design.JasperDesign jasperDesign = JRXmlLoader.load(fichier);
    net.sf.jasperreports.engine.JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    net.sf.jasperreports.engine.JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jdbcConnection);
    if(format == null)
    {
    out.setContentType("application/pdf");
    out.setHeader("Content-disposition", "filename=etat.pdf");

    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out2);
    exporter.exportReport();
    out2.flush();
    out2.close();
    } else
    if(format.equalsIgnoreCase(PDF_FORMAT))
    {
    out.setContentType("application/pdf");
    out.setHeader("Content-disposition", "filename=etat.pdf");
    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out2);
    exporter.exportReport();
    out2.flush();
    out2.close();
    } else
    if(format.equalsIgnoreCase(HTML_FORMAT))
    {
    out.setContentType("text/html");
    out.setHeader("Content-disposition", "filename=etats.html");
    JRHtmlExporter exporter = new JRHtmlExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out2);
    exporter.exportReport();
    } else
    if(format.equalsIgnoreCase(RTF_FORMAT))
    {
    out.setContentType("application/ms-word");
    out.setHeader("Content-disposition", "filename=etat.rtf");
    JRRtfExporter exporter = new JRRtfExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out2);
    exporter.exportReport();
    } else
    if(format.equalsIgnoreCase(EXCEL_FORMAT))
    {

    out.setContentType("application/ms-excel");

    out.setHeader("Content-disposition", "filename=etat.xls");

    JRXlsExporter exporter = new JRXlsExporter();

    // JRGraphics2DExporter exporter = new JRGraphics2DExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out2);

    exporter.exportReport();
    out2.flush();
    out2.close();
    }
    out2.flush();
    out2.close();
    }
    catch(Exception ex)
    {
    String connectMsg = (new StringBuilder("Ne peut creer le stream du report")).append(ex.getMessage()).append(" ").append(ex.getLocalizedMessage()).toString();
    System.out.println(connectMsg);
    }


    }

    public Connection getJdbcConnection()
    {
    return jdbcConnection;
    }

    public void setJdbcConnection(Connection jdbcConnection)
    {
    this.jdbcConnection = jdbcConnection;
    }

    public String getFormat()
    {
    return format;
    }

    public void setFormat(String format)
    {
    this.format = format;
    }

    public Map getParameters()
    {
    return parameters;
    }

    public void ajouterParametre(String nom, Object valeur)
    {
    if(parameters == null)
    parameters = new HashMap();
    parameters.put(nom, valeur);
    }

    public void setParameters(Map parameters)
    {
    this.parameters = parameters;
    }



    }
    et l'autre class :

    public void imprimerep(ActionEvent actionEvent) {

    String url = "jdbc:mysql://mabase:3306/db";
    String login = "login";
    String password = "password";
    FacesContext fc = FacesContext.getCurrentInstance();
    ExternalContext ec= fc.getExternalContext();

    try {
    // - Connexion à la base
    Driver monDriver = new com.mysql.jdbc.Driver();
    DriverManager.registerDriver(monDriver);
    Connection connection = DriverManager.getConnection(url, login, password);
    ReportGenerator ge =new ReportGenerator(connection,"pdf") ;
    HttpServletResponse response=(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
    // ServletContext context=(ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
    File fichier=new File("/home/ShareFiles/ReclamationFiles/etats/rec_envoye.jrxml") ;
    // File fichier=new File("C:/Documents and Settings/MEBOUZOUITA/Bureau/etats reclamations/rec_envoye.jrxml") ;
    ge.showInBrowser(fichier,response);
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    la 1er classe pour construire l'etat et la 2eme qui fait l'appelle


    @+

  9. #9
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Salut, mbouzouita !
    Ton code fonctionne mais génère quand même encore une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    26-nov.-2007 9:49:44 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@1949f78) threw exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Sais-tu pourquoi ?

  10. #10
    Membre habitué
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Points : 167
    Points
    167
    Par défaut
    salut,

    je ne sais pas comment tu as fait , personnelement j'ai creé une page web qui contient trois link ou boutton pour avoir 3 types d'etat pdf,rtf,excel.

    Et l'etat s'ouvre dans cette page.

    Mon application tourne sans auccune erreur.

    @+

  11. #11
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    J'ai Windows 2000, SP4 et j'utilise SUN RI de JSF sur Tomcat 6, jre 1.6.03 + Eclipse for J2EE Developpers.
    Je n'ai qu'une page jsp avec un bouton pour générer un rapport en PDF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    	pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Report Generation</title>
    </head>
    <body>
    <f:view>
    	<h:outputText value="Click on the link below to generate the
    report." />
    	<h:form>
    		<h:commandLink action="generate_report"
    			actionListener="#{reportGenerator.generateReport}">
    			<h:outputText value="Generate Report" />
    		</h:commandLink>
    	</h:form>
    </f:view>
     
    </body>
    </html>
    fichier faces-config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    	version="1.2">
    	<managed-bean>
    		<managed-bean-name>reportGenerator</managed-bean-name>
    		<managed-bean-class>beans.ReportBean</managed-bean-class>
    		<managed-bean-scope>request</managed-bean-scope>
    	</managed-bean>
     
    </faces-config>
    Et quand je clique sur le bouton, le browser me propose soit ouvrir soit sauvegarder le fichier PDF en question, voilà. Je ne sais plus comment résoudre ce problème qui n'a rien de difficile il paraît. Et pourtant...

  12. #12
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    dans ton fichier faces-config:
    <navigation-rule>
    <display-name>
    generate</display-name>
    <from-view-id>
    /generate.jsp</from-view-id>
    <navigation-case>
    <from-outcome>
    generate_report</from-outcome>
    <to-view-id>
    /generate.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    ce navigation rule correspond a quoi???

  13. #13
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Pour cette "navigation rule" - avant il y avait le "redirect" vers la même page, ç.à.d. "generate.jsp", - j" l'ai ajouté parce qu'il y avait an "warning" dans la page JSP (souligné dans le code ci-dessous) comme "The action value doesn't match a navigation case outcome".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <f:view>
    	<h:outputText value="Click on the link below to generate the
    report." />
    	<h:form>
    		<h:commandLink action="generate_report"
    			actionListener="#{reportGenerator.generateReport}">
    			<h:outputText value="Generate Report" />
    		</h:commandLink>
    	</h:form>
    </f:view>
    Je l'ai enlevé après. Mais de toute façon, ça ne change rien. Le fichier PDF ne s'ouvre pas dans le browser(je teste dans le browser interne d'Eclipse), mais une boîte de dialogue me propose soit de l'ouvrir (dans ce cas il s'ouvre dans Adobe Reader et pas dans le browser!) soit de l'enregistrer sur le HD. En plus il y a toujours cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    INFO: Server startup in 1599 ms
    27-nov.-2007 9:51:13 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@1d382ab) threw exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    27-nov.-2007 9:51:13 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet Faces Servlet a généré une exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Et dans ton code les lignes suivantes (voir la méthode 'imprimerep') ne sont jamais référencées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FacesContext fc = FacesContext.getCurrentInstance();
    	ExternalContext ec = fc.getExternalContext();
    elles servent à quoi ?

  14. #14
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    action="generate_report" tu doit l'enlever ca sert a rien dans ton context

  15. #15
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    C'est fait mais l'exception ets toujours là et le PDF ne s'ouvre pas dans le browser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    INFO: Server startup in 1402 ms
    27-nov.-2007 10:25:16 com.sun.faces.lifecycle.LifecycleImpl phase
    ATTENTION: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@56182f) threw exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    27-nov.-2007 10:25:16 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet Faces Servlet a généré une exception
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
    	at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
    	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
    	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)

  16. #16
    Membre habitué
    Profil pro
    Analyste programmeur
    Inscrit en
    Novembre 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyste programmeur

    Informations forums :
    Inscription : Novembre 2006
    Messages : 197
    Points : 167
    Points
    167
    Par défaut
    j'espere que ça t'aideras:

    http://www.jroller.com/ouertani/date/20070127


    @+

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/05/2012, 11h48
  2. Utilisation spring avec jsf
    Par rushtakn dans le forum JSF
    Réponses: 9
    Dernier message: 16/06/2009, 09h30
  3. Debutant : Question sur jasperReport avec jsf
    Par kam81 dans le forum JSF
    Réponses: 2
    Dernier message: 08/11/2008, 19h53
  4. Utiliser RichFaces avec JSF 1.2
    Par Dimitri_87 dans le forum JSF
    Réponses: 3
    Dernier message: 02/04/2008, 17h07
  5. utilisation de base de donnée avec JSF
    Par kedare dans le forum JSF
    Réponses: 1
    Dernier message: 16/05/2006, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo