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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 713
    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 713
    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)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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 713
    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 713
    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 ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 232
    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:

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