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

Servlets/JSP Java Discussion :

J2EE et CWolf-JFreeChart


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut J2EE et CWolf-JFreeChart
    Bonjour,
    je commencer à travailler dans une grande application.. J2EE basée sur, EJB Session, struts, hibernate. j'aurais a afficher des statistiques par rapport aux donnees qui sont dans la base. après première recherche, j'ai trouve Bien le couple CWolf-JFreeChart..pour les utiliser, suffit-il d'installer la distribution de libraires jar fourni par CWolf...c'est fatile de les utiliser dans une application avec ejb et hibernate??
    merci beaucoup de vos reponses

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Salut,

    Je n'utilise ni Cewolf, ni les EJB, ni Hibernate mais voilà comment tu peux procèder pour afficher un graphe JFreeChart avec Struts :

    Dans le web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<servlet>
    		<servlet-name>DisplayChart</servlet-name>
    		<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>DisplayChart</servlet-name>
    		<url-pattern>/servlet/DisplayChart</url-pattern>
    	</servlet-mapping>
    Dans l'Action :
    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
     
    public class GrapheAction extends Action
    {
      public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
     throws Exception
      {
    	XYDataset dataset = this.createDataset() ;
     
    	JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("titre", "abscisse", "ordonnee", dataset, true, true, false);
     
    	jfreechart.setBackgroundPaint(Color.white);
     
            XYPlot xyplot = jfreechart.getXYPlot();
     
    	DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
    	dateaxis.setTickUnit(new DateTickUnit(1, 1, new SimpleDateFormat("MMM-yyyy")));
    	dateaxis.setVerticalTickLabels(true);
     
    	XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
    	renderer.setBaseShapesVisible(true);
    	renderer.setSeriesFillPaint(0, Color.red);
    	renderer.setUseFillPaint(true);
    	renderer.setToolTipGenerator(new StandardXYToolTipGenerator("{0} {1} {2}",new SimpleDateFormat("MMM-yyyy"),NumberFormat.getInstance()));
     
    	ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
     
    	int largeur = 900 ;
    	int hauteur = 600 ;
     
    	String filename = ServletUtilities.saveChartAsJPEG(jfreechart, largeur, hauteur, info, request.getSession());
     
    	Graphe graphe = this.initImage(request, info, filename);
     
    	request.setAttribute("graphe",graphe) ;
     
    	return mapping.findForward("success"); 
      }
      private Graphe initImage(HttpServletRequest request,ChartRenderingInfo info, String filename)
      {
    	String sMap = ChartUtilities.getImageMap(filename,info);
    	String src = request.getContextPath()+"/servlet/DisplayChart?filename=" + filename ;
    	String useMap = "#" + filename  ;
     
    	Graphe graphe = new Graphe() ;
    	graphe.setMap(sMap);
    	graphe.setSrc(src) ;
    	graphe.setUseMap(useMap) ;
     
    	return graphe ;
      }
      private XYDataset createDataset()
      {
            TimeSeries series = new TimeSeries("Series 1", Month.class); 
            series.add(new Month(1, 2006), 805); 
            series.add(new Month(2, 2006), 883); 
            series.add(new Month(3, 2006), 664); 
            series.add(new Month(4, 2006), 813); 
            series.add(new Month(5, 2006), 732); 
            series.add(new Month(6, 2006), 805); 
     
            TimeSeriesCollection dataset = new TimeSeriesCollection(); 
            dataset.addSeries(series);
     
            return dataset ;
      }
    }
    Dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
     
    <div align="center">
    	${graphe.map}
    	</br>
    	<html:img src="${graphe.src}" usemap="${graphe.useMap}" border="0"/>
    <div>
    Dans mon exemple, tout le code qui permet de constituer le graphe est dans l'Action, pour simplifier le post.
    Mais je te conseille de créer autant de composants que de types de graphes à réaliser (courbe, histogramme, ...).

    Et puis, à toi de constituer le dataset à partir des données de ta BD.

    Ne pas oublier de copier les jar jfreechart et jcommon sous WEB-INF/lib.

    J'espère que ceci t'aidera.
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    je te remercie beaucoup pour ton aide, c'est très sympa.

    sinon j'ai quelques questions, et ej suis vraiment désolé, car cela fait longtemps que j'ai pas developpé.

    si j'ai bien compris, et supposant que je veux dessiner une courbe, histogramme et tableau :

    je dois créer 3 classes normales : dans chaque classe je met le code spécifique pour générer le graphique

    je passe comme paramètre à ces classes ma Map de données et ils me retournent un objet Java (Graphe ou il y a que des getters et des setters)

    est-ce que le code que tu m'as fourni peut être factorisé pour els autres graphiques???

    merci ebaucoup d'avance

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans le code de l'Action que j'ai posté, il y a des éléments communs à tous les graphes et d'autres spécifiques à un type de graphe.

    Par exemple, 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
     
    JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("titre", "abscisse", "ordonnee", dataset, true, true, false);
     
    jfreechart.setBackgroundPaint(Color.white);
     
    XYPlot xyplot = jfreechart.getXYPlot();
     
    DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
    dateaxis.setTickUnit(new DateTickUnit(1, 1, new SimpleDateFormat("MMM-yyyy")));
    dateaxis.setVerticalTickLabels(true);
     
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
    renderer.setBaseShapesVisible(true);
    renderer.setSeriesFillPaint(0, Color.red);
    renderer.setUseFillPaint(true);
    renderer.setToolTipGenerator(new StandardXYToolTipGenerator("{0} {1} {2}",new SimpleDateFormat("MMM-yyyy"),NumberFormat.getInstance()));
    est spécifique à une courbe avec des dates en abscisse.

    Ceci peut donc être mis dans un composant à part car si tu as plusieurs Actions qui génère le même type de courbe,
    il est dommage de coder plusieurs fois la même chose dans chacune des Actions.

    En ce qui concerne l'objet Graphe, j'ai fait le choix de le créer pour faciliter l'affichage dans la jsp.
    D'ailleurs, à ce sujet, le code de la jsp que je t'ai donné fonctionne seulement si tu es en J2EE 1.4.

    Bref, je t'ai donné un exemple de mise en oeuvre de JFreeChart avec Struts.
    J'ai tout synthétisé dans une Action pour simplifier mais il est clair que je ne l'ai pas mis en oeuvre tel quel dans mon projet.
    A toi de voir comment optimiser tout ça en fonction de tes besoins.

    Pour info, dans le zip de JFreeChart, il y a jfreechart-1.0.0-demo.jar avec plein d'exemples de graphes.
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup pour tous ces conseils :-)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    Rebonjour
    Juste une précition stp quand t'as dit :

    créer autant de composants que de types de graphes à réaliser (courbe, histogramme, ...).

    le composant pour toi ce sont soit des servlets ou autres actions, pas des classes normales, car on doit passer le request en parametre?

    merci beaucoup

  7. #7
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Quand je parle de composants, je parle de classes java et non de servlets ou d'actions.

    Quand tu parles de la request passée en paramètre, tu fais référence à ce code-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	String src = request.getContextPath()+"/servlet/DisplayChart?filename=" + filename ;
    Si c'est le cas, en fait, le request.getContextPath() n'est pas obligatoire, surtout si utilises les tags Struts qui le rajoute automatiquement.

    Le code exemple que je t'ai donné est loin d'être parfait.
    Tu dois pouvoir faire simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	String src = "/servlet/DisplayChart?filename=" + filename ;
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    oui je parle du code que 'tas ecrit et aussi de cette portion :

    filename = ServletUtilities.saveChartAsPNG(jfreechart, largeur, hauteur, info, request.getSession());

    merci beaucoup

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    mais sinon j'ai essayé le code que tu m'as donné sans le request, mais ca n'a pas marché.
    excuse moi mais de quels tags struts il s'agit?

  10. #10
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Je parlais du tag html:img mais en fait, après réflexion, ça ne doit effectivement pas fonctionner comme ça.

    En fait, l'idéal c'est de faire en sorte que ce code-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename = ServletUtilities.saveChartAsPNG(jfreechart, largeur, hauteur, info, request.getSession());
    soit dans l'Action ou la servlet pour ne pas avoir à conserver la request.
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    Ok, merci beaucoup :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2009, 15h52
  2. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  3. [J2EE] Connaitre l'IP d'un visiteur
    Par goulime dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 14h23
  4. [débutant]Architecture de développement J2EE
    Par mastok dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/01/2004, 16h30
  5. Gros problème avec JB8 et appli J2EE
    Par patbier dans le forum JBuilder
    Réponses: 10
    Dernier message: 07/03/2003, 10h52

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