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

avec Java Discussion :

Jasper Report avec Struts 2


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut Jasper Report avec Struts 2
    salut,

    je veux faire tourner un simple exemple de reporting (jasper report) avec une application JEE (faite avec EJB3 et struts2)

    j'arrive à faire un code de reporting en java et non pas avec JEE ( avec struts2)

    le code en java est :

    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
    public static void generer_rapport(String fileName) throws JRException {
    		// Le chemin du fichier .JRXML
     
    		JasperDesign jasperDesign = JRXmlLoader.load("c:\\test1.jrxml");
    		JasperReport jasperReport = JasperCompileManager
    				.compileReport(jasperDesign);
     
    		Map parameters = new HashMap<String, String>();
    		parameters.put("titre", "Listing les ");
    		// - Execution du rapport
     
    		// creation du fichier .PDF
    		JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
    				parameters, new JREmptyDataSource());
    		JasperExportManager.exportReportToPdfFile(jasperPrint,  "c:\\"+fileName+".pdf");
     
    	}
    avec bien sur importation de lib nécessaire

    ce code ca marche parfaitement

    j'essaye de faire le changement necessaire pour generer un rapport pdf avec struts2

    je cree une class GenererPDF.class
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    package com.test;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
     
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperExportManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.design.JasperDesign;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;
     
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.Driver;
     
    public class GenererPDF {
     
     
     
        	public String generer()
        	{
        		 // - Paramètres de connexion à la base de données
                String url = "jdbc:mysql://localhost/basetest";
                String login = "root";
                String password = "root";
                Connection connection = null;
     
                try {
                    // - Connexion à la base
                    Driver monDriver = new com.mysql.jdbc.Driver();
                    DriverManager.registerDriver(monDriver);
                    connection = (Connection) DriverManager.getConnection(url, login, password);
     
                    // - Chargement et compilation du rapport
                    JasperDesign jasperDesign = JRXmlLoader.load("C://test.jrxml");
                    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
     
                    // - Paramètres à envoyer au rapport
                    Map parameters = new HashMap();
                    parameters.put("Titre", "Titre");
     
                    // - Execution du rapport
                    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connection);
     
                    // - Création du rapport au format PDF
                    JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\test.pdf");
                } catch (JRException e) {
     
                    e.printStackTrace();
                } catch (SQLException e) {
     
                    e.printStackTrace();
                } finally {
                    try {
                         connection.close();
                        } catch (SQLException e) {
     
                                e.printStackTrace();
                        }
                }
     
     
           return "success";
     
        }
    }

    je crée un dossier report sous WebContent et je place le fichier test.jrxml sous ce dossier

    mais comme vous voyer dans le code de la class GenererPDF j'essaye d’accéder au fichier test.jrxml qui est placé sous C:

    le fichier struts.xml est :

    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
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
     
    <struts>
       <include file="struts-default.xml"/>
         <package name="default" extends="struts-default">
            <action name="generation" method="generer" class="com.test.GenererPDF">
                <result name="success">/index.jsp</result>
            </action>
     
     
         </package>
    </struts>
    la page Rapport.jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
     
    </head>
    <body>
    <a href="generation.action">click ici pour générer un PDF</a>
     
    </body>
    </html>
    mais lors de l’exécution cette erreur est affichée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    There is no Action mapped for namespace / and action name generation. - [unknown location]
    	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
    	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
    	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:497)
    	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
    merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    en faite j'arrive à générer un fichier PDF

    mais mon problème actuelle est comment accéder de manière dynamique au fichier test.jrxml qui est placé sous le dossier report

    ce dossier (report) est placé sous WebContent

    donc grâce a cette manière le fichier test.jrxml devrai être dépend de l'application et non pas de répertoire C:

    permet la portabilité de l'application
    cette ligne doit être changée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JasperDesign jasperDesign = JRXmlLoader.load("C://test.jrxml");

    aussi je veux que le fichier générer qu'il soit ouvrir dans la même fenêtre de la page JSP

    je parle de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JasperExportManager.exportReportToPdfFile(jasperPrint,  "c:\\"+fileName+".pdf");

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    personne n'a aucune idée sur un accès dynamique à un fichier sous le dossier WebContent

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Il y a peut-être une solution en stockant ton jrxml non pas sur "C://test.jrxml");
    mais directement dans le package com.test.
    (il suffit pour cela de la placer à coté de ta classe qui utilise ton rapport).

    pour charger le rapport qui se trouve alors dans le jar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            URL LeRapport = getClass().getResource("test.jrxm");
            JasperDesign jasperDesign = JRXmlLoader.load(LeRapport );
    à noter que si tu composes ton rapport avec IReport, tu peux le faire compiler préalablement
    par IReport. Dans ce cas c'est "test.jasper" que tu enregistre dans le package et tu peux le manipuler directement sans avoir à le recompiler à chaque fois que tu le lances.

    dans ce cas tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            URL LeRapport = getClass().getResource("test.jasper");
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(LeRapport);
    (j'ai retiré les try/catch)

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    merci pour votre réponse,

    comme je dis le code qui j'ai déjà donné fonctionne correctement

    j'essaye d'appliquer votre changement

    je compile le fichier test.jrxml à travers iReport

    et je place le fichier test.jasper sous SRC dans le même emplacement de la class GenererPDF

    je change ces deux ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // - Chargement et compilation du rapport
                    JasperDesign jasperDesign = JRXmlLoader.load("C://test.jrxml");
                    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     URL LeRapport = getClass().getResource("test.jasper");
                    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(LeRapport);



    mais cette erreur est affichée :

    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
     
     
    javax.servlet.ServletException: net.sf.jasperreports.engine.JRRuntimeException: No such parameter SORT_FIELDS
    	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
    	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
     
     
    cause mère 
     
    net.sf.jasperreports.engine.JRRuntimeException: No such parameter SORT_FIELDS
    	net.sf.jasperreports.engine.fill.JRFillDataset.getParameterValue(JRFillDataset.java:963)
    	net.sf.jasperreports.engine.fill.JRFillDataset.getParameterValue(JRFillDataset.java:944)
    	net.sf.jasperreports.engine.fill.DatasetSortUtil.needSorting(DatasetSortUtil.java:86)
    	net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:609)
    	net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)
    	net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:901)
    	net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)
    	net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)
    	net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
    	com.test.GeneratePDF.generer(GeneratePDF.java:53)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    ainsi je veux savoir comment faire ouvrir le fichier PDF généré après être enregistrer

    c à dire ajouter un code java après cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // - Création du rapport au format PDF
                    JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\test.pdf");

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No such parameter SORT_FIELDS
    Il s'agit d'un bug connu antérieur à la version 3.7.6 de JasperReport
    voir : http://jasperforge.org/plugins/espne...83&news_id=256

    donc en installant une version récente, et en re-compillant test.jrxml cela devrait régler le pb

    Joyeuses Pâques ...

  7. #7
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    encore merci pour votre réponse,

    ca marche parfaitement suite à votre aide,

    mais est il possible d'ouvrir ce fichier générer au même temps de l'enregistrement sous le répertoire C:

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    mais est il possible d'ouvrir ce fichier générer au même temps de l'enregistrement sous le répertoire C:
    que veux-tu dire par là ?

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    mon but est quand je clique sur ce lien de la page jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="generation.action">click ici pour générer un PDF</a>
    le fichier test.pdf ( le fichier générer) devrait être ouvert

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Une fois que tu as rempli ton test.jasper avec "JasperFillManager.fillReport"
    tu l'exportes normalement comme tu l'as écrit dans ton programme.

    Cela donne quelque chose comme :

    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
     
            // - Chargement du rapport à partir du package
            URL LeRapport = getClass().getResource("test.jasper");
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(LeRapport);
     
            // - Paramètres utilisés dans le rapport
            Map parameters = new HashMap<String, String>();
            parameters.put("titre", "Listing les ");
     
            // - "remplissage" du rapport pour pouvoir ensuite l'exporter au format qu'on veut
            //    (en pdf, en xls, en html, en jpeg ... on a de quoi s'amuser)
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
     
            // creation du fichier .PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint,  "c:\\test.pdf");

  11. #11
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    le fichier test.pdf c'est vrai il est générer et il est enregistré sous C:

    mon mon but est qu'il soit ouvert dés que je clique sur le lien de la page jsp

    sans aller dans C: et l'ouvrir manuellement

    je pense que c'est possible de faire un genre de code java qui fait ce travail

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    Aïe ! ce n'est plus un problème Jasper
    C'est un problème HTML (généré par jsp)
    et mon ignorance est grande dans ce domaine

    Piste de recherche :
    Il faut que tu trouves dans HTML l'instruction qui va ouvrir automatiquement un fichier en fonction de son extension.
    Cela doit être probablement un lien avec un paramètre particulier (genre autoopen ...)
    ou encore, cela doit être faisable avec JavaScript.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    j'arrive à ouvrir le fichier PDF générer à travers code HTML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="file:///C:/test.pdf">ouvrir le fichier généré</a>
    mais mon but actuelle est que je veux enregistrer le fichier test.pdf dans le dossier report qui est situé sous WebContent et non pas enregistrer ce fichier sous C:

    pour permettre la portabilité de l'application

    donc je dois modifier cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	JasperExportManager.exportReportToPdfFile(jasperPrint,  "c:\\"+fileName+".pdf");

  14. #14
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    WebContent : ce ne serait pas un dossier créé par Eclipse et contenant les fichiers destinés à être publiés ?
    Dans ce cas il ne s'agit pas du "vrai" dossier de travail ?

    J'ai l'impression qu'il faut que ton code java repère le chemin du dossier de l'application dans lequel
    il est en train de s'exécuter, créer le dossier "report" s'il n'existe pas, y placer le test.pdf puis créer le lien HTML de façon dynamique

  15. #15
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    Points : 47
    Points
    47
    Par défaut
    en faite je n'arrive pas à comprendre votre réponse

    j'essaye de simplifier les choses

    le but est de faire enregistrer un fichier test.pdf sous le dossier report ce fichier (test.pdf)est généré de manière dynamique

    le dossier report est créé manuellement

    et par la suite ouvrir ce fichier

    j'essaye avec ce code d'enregistrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JasperExportManager.exportReportToPdfFile(jasperPrint,  ".\WebContent\report\test.pdf");
    et le code html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="file:./report/test.pdf">ouvrir le fichier généré</a>
    la page jsp qui contient de code html est sous WebContent

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JasperExportManager.exportReportToPdfFile(jasperPrint,  "./WebContent/report/test.pdf");
    mais c'est un détail.

    J'imagine que le serveur d'application (tomcat, glassfish ?) , quand il est en production,
    doit avoir son propre dossier pour y stocker ses pages JSP, HTML statiques, les images etc.

    Il doit quand même être possible de connaître le nom de ce dossier
    si ce n'est pas WebContent

Discussions similaires

  1. Intégration de Jasper Report avec Strust 2
    Par alen22 dans le forum Struts 2
    Réponses: 1
    Dernier message: 12/04/2012, 01h59
  2. jasper report avec jasper Assistant
    Par riadhhwajdii dans le forum Jasper
    Réponses: 1
    Dernier message: 24/10/2009, 11h38
  3. Problèmes de date avec Jasper Report
    Par ofo_tn dans le forum Jasper
    Réponses: 2
    Dernier message: 23/01/2009, 19h06
  4. Réponses: 6
    Dernier message: 21/10/2008, 11h02
  5. debutant avec jasper report !
    Par saadaoui_ilias dans le forum iReport
    Réponses: 1
    Dernier message: 22/06/2008, 11h21

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