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

Taglibs Java Discussion :

[Cewolf] plusieurs graphes


Sujet :

Taglibs Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut [Cewolf] plusieurs graphes
    Bonjour,

    J'aimerais savoir comment à partir de données d'une classe Action je peux générer plusieurs graphes avec Cewolf (et ce dans la même page).

    Est-ce que je fais une classe qui extends Action et qui implements DatasetProducer, Serializable ?


    Je sais faire un graphe a partir d'une classe qui implemente DatasetProducer, CategoryToolTipGenerator, CategoryItemLinkGenerator, Serializable... mais il n'y a qu'un graphe en résultat.

    Merci de votre aide !

  2. #2
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    J'ai utilisé CE Wolf sur un projet, mais il y a un petit moment maintenant..

    D'apres mes souvenirs, CEWOLF utiliser sa propre Servlet....?

    Donc il faut que ta jsp tu lui mette plusieurs balise correspondant aux differents graphe que tu veux afficher!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Merci de ton aide
    Plusieurs balises, ok.

    Mais à propos de la servlet:
    La même servlet génère chacun des graphes ?

    La je me trouve avec une classe Action qui contient 4 tableaux de données (récupérés d'un formulaire). Que faire ?

    Cette classe action peut instancier des objets de la classe Cewolf ? C'est encore obscur pour moi.

  4. #4
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Il faut definir une classe par graphique.

    Chaque classe doit implementer les interfaces : DatasetProducer, Serializable

    Chaque classe doit pouvoir acceder aux données dont elles ont besoin pour créer le graphique.

    en fait, l'actionForm doit juste lui fournir les parametres necessaire à la recuperation des données.

    voila un exemple de classe :
    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
     
     
    public class CollectGraphicDatas implements DatasetProducer, Serializable {
     
        public Object produceDataset(Map params) throws DatasetProduceException {
     
            String codeStructure = (String) params.get(Keys.CODE_STRUCTURE_PARAM);
            String idData = (String) params.get(Keys.ID_DATA_PARAM);
            if (codeStructure == null || idData == null) {
                throw new NullPointerException(
                        "un des parametres, concernant le graphique, est null.[CollectGraphicDatas]");
            }
     
     
            //  init du service
            DatasBusiness datasBusiness = (DatasBusiness) ServiceManagerFactory
                    .getInstance(Keys.DATA_SERVICE_MANAGER_KEY);
     
            Collection dtosHisto = datasBusiness.selectLastDatasHistoForGraph(codeStructure, idData,new Integer(3));
     
            final String labelData = getLibelleData(dtosHisto);
            final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     
            for (Iterator iter = dtosHisto.iterator(); iter.hasNext();) {
                DataDTO element = (DataDTO) iter.next();
                dataset.addValue(element.getValeur(), labelData, element.getDate());
            }
     
            return dataset;
        }
     
        public boolean hasExpired(Map params, Date since) {
     
            return (System.currentTimeMillis() - since.getTime()) > 5000;
        }
     
        public String getProducerId() {
            return "PageViewCountData DatasetProducer";
        }
     
        public String generateLink(Object data, int series, Object category) {
            return "courbe 1";
        }
     
        public String generateToolTip(CategoryDataset arg0, int series, int arg2) {
            return "courbe 1";
        }
     
        private String getLibelleData(Collection c){
            for (Iterator iter =c.iterator(); iter.hasNext();) {
                DataDTO element = (DataDTO) iter.next();
                // TODO Libelle data!!!
                String libData = element.getLibelleData();
                if(libData==null)break;
                return libData;
            }
            //cas ou la liste est vide
            return "no data";
            }

    remarque :
    la methode produceDataset (param) fait un acces au modele de donnée avec comme restriction les parametres contenu dans l'objet param.

    Voila le code dans la JSP :
    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
     
     
    <%
    			InformationsDataActionForm itemData = (InformationsDataActionForm)request.getAttribute("informationDatasActionForm");
    			String cs = itemData.getCodeStructure();
    			String id = itemData.getIdData();
    		%>
        <td align='center'><jsp:useBean id="graph1Datas" class="presentation.graphic.CollectGraphicDatas"/>
    		<cewolf:chart 
      		  id="graph1" 
      		  title="" 
      		  type="line" 
      		  xaxislabel="Périodes" 
      		  yaxislabel="Valeurs">
      		  <cewolf:data>
           		 <cewolf:producer id="graph1Datas">
           		 	<cewolf:param name="codeStructure" value="<%=(String)cs%>" />
           		 	<cewolf:param name="idData" value="<%=(String)id%>" />
           		 </cewolf:producer>
       		  </cewolf:data>
    		</cewolf:chart>
    		<p>
    		<cewolf:img chartid="graph1" renderer="cewolf" width="300" height="250"/>
    		<p>
    		</td>
      </tr>
    Les premieres lignes correspondent à la recuperation des parametres dans l'action form. et les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <cewolf:producer id="graph1Datas">
           		 	<cewolf:param name="codeStructure" value="<%=(String)cs%>" />
           		 	<cewolf:param name="idData" value="<%=(String)id%>" />
           		 </cewolf:producer>
    au passage des parametres à la classe CollectGraphicDatas.

    Il faut que tu mettes tes quatres tableaux comme attribut de ton actionform
    Que ta classe ProducerData saches recuperer et traduire ces tableaux en
    DefaultCategoryDataset.
    Et que dans JSP tu passes tes tableaux en parametre...

    Chaque tableau correspondra à une balise.

    Voila! Je ne sais pas si j'ai été super clair.. je t'avoue qu'aujourd'hui je suis pris par le temps.. Si tu as des questions n'hesites pas!!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Je m'attendais pas à autant de précisions !
    Je te remercie. Je vais regarder de près la solution que tu proposes

    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    D'après ce tu me montres comme code, j'ai suivi ce principe:

    - ma classe action vérifie les graphes demandés par l'utilisateur dans le formulaire et passe en session les tableaux de float nécessaires à la classe DatasetProducer.
    - dans mon jsp je récupère les tableaux en session, s'il y en a.
    Je dois me débrouiller à les passer en paramètre à la classe DatasetProducer.
    - dans la méthode produceDataset(Map params) de mon DatasetProducer, je dois construire le dataset.

    Est-ce correct ?

  7. #7
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    C'est exactement ca!!


    Juste , si je peux juste faire une remarque, il faut generalement eviter de mettre des données metiers en session, et plus généralement de surcharger la session. c'est un rique de faire exploser la memoire du serveur...
    deplus si tu oublies de suprimer tes tableaux de la session, tu peux te les trimbaler longtemps... au mieux tu peux les placer dans la request..la durée de vie est limitée.

    Je te conseille donc de placer des tableaux en attribut de ton actionForm

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Je te remercie encore, ca marche assez bien, enfin j'ai graphe de base qui représente ce que je souhaite. Je bricolerai dessus plus tard.

    Ta remarque soulève un problème.

    Voici comme ca se passe:

    Action1.java calcule plein de trucs et passe en session (dans la fonction execute) un Bean, deux Vectors.
    1 de ces vector est immédiatement utilisé par Page2.jsp

    Surcharger la session, je ne vois pas très bien comment faire. Surcharge d'opérateur ca me parle mais pour la session pas trop. Je vais chercher des cours ou tutos.
    C'est utile dans mon cas ?
    C'est bon de faire dans mon jsp un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% session.removeAttribute(bla); %>
    Pages2.jsp est un formulaire, permettant de générer des graphes liés au données qu'il a déjà en partie obtenu.

    Form2.java récupère 1 vecteur non utilisé toujours en session.
    Je fais le tri des données utiles dans page2.jsp ou dans Action2.java ?
    Si ma jsp ne transmet que des tableaux au lieu d'un vecteur, ca sera ca de gagner.

    Aussi est-ce que l'emploi de Vector est approprié. Me suis demandé si l'emploi d'ArrayList n'est pas plus léger ?
    Je ne fais que du parcours/ajout itératif.

  9. #9
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Je me suis mal exprimé. Par surcharger la session j'entendais mettre trop de chose en session, la rendre trop volumineuse.

    ce qu'il faut voir, c'est que le serveur reserve un espace memoire pour chaque session utilisateur. Si il y a deux utilisateurs ca peu encore aller!

    Par contre si tu as des milliers d'utilisateurs imagine la taille de la memoire du serveur... donc en regle general il faut eviter de stocker bcp de chose en session , mais que l'essentiel!

    C'est pour cela que je te parlais de mettre des tableaux en attribut de l'action form... car les objets ne vivrons que le temps d'une requete..(tu utilises bien struts?) et ne surchargerons pas la session!

    Aussi je vois que tu fais du tri dans ta Jsp, je te conseille de plutot faire cela au niveau du modele.. le sql est vraiment adapté pour ca! Si ce n'est pas possible, eventuellement dans ton action (si tu n'as pas de couche couche intermediaire), mais surtout pas dans le JSP...normalement la JSP est dedié à la presentation (HTML) il faut minimiser les scriptlets dedans...

    C'est juste des conseils..


    Concernant le choix entre vecteur et ArrayList, c'est vrai que je n'utilise pas de vecteur mais que des ArrayLists voir des Map.
    Je crois que l'ArrayList est effectivement plus legere.

    Toujours pareil , si tu as des questions; n'hesites pas!

  10. #10
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Je ne sais pas si mon dernier post à resolu ton probleme.. mais si c le cas... il faudrait que l'indique par le tag 'résolu'..

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Hello ! Merci à toi fabszn :-)

    J'étais en week end prolongé , j'ai lu ton message mais je n'avais plus le code sous les yeux...
    Promis je n'oublie pas de mettre topic résolu

    Edit 1: pour le tri, je me suis mal exprimé. Le jsp regarde juste s'il y a des données en session ou non. Elle agit, affiche les graphe si necessaire.

    Edit 2: je suis stupide, je n'ai pas utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:present ... > ... </logic:present>

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Dans ma classe Action, fonction execute je fais ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (ggf.getGraphe1().equals("true")) {
    			System.out.println("graphe1 true");
    			float[] tabISYear1 = (float[]) ggf.getISdata().get(0);
    			session.setAttribute("lala1", tabISYear1);
    		}
    Dans la page jsp:

    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
     
    <logic:present name="<%=com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY%>">
    <jsp:useBean id="pageViews" class="com.scot.wipp.GraphicISProducer"/>
    <cewolf:chart     id="line"     title="Indice de stress hydrique pour les vignes"     type="line"     xaxislabel="Jours"     yaxislabel="Indice de Stress">
    	<cewolf:data>        
    		<cewolf:producer id="pageViews">
    			<cewolf:param name="tabISYear" value="<%=com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY%>" />
    			<cewolf:param name="labelScenario" value="<%= (float[]) session.getAttribute(com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY) %>" />    
    	    </cewolf:producer>   
    	</cewolf:data>
    </cewolf:chart>
    <p>
    <cewolf:img chartid="line" renderer="cewolf" width="800" height="600"/>
    <P>
     
     
    </logic:present>
    Tu me conseillais d'avoir mon ActionForm qui transmet les données à la classe qui produit le graphe...
    Dans ce cas la, je met quoi dans la jsp pour faire (éventuellement) 4 graphes ?
    Il me faut 4 classes pour produire (éventuellement) les 4 graphes ?
    Je fait les appels dans la page jsp sans préciser de paramètres de données ?

    Je crois que y'a que maintenant que je comprends ce que tu voulais dire... dsl j'ai vraiment du mal.

    Je vais me débrouiller pour utiliser des ArrayList. D'après ce que j'ai lu, c'est plus adéquat.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Autre question... plus à propos d'un graphe en lui-même.

    J'ai un dataset et un chart de type line.
    Comment pourrais-je modifier l'echelle de l'axe des abscisses ?
    Il se trouve que j'ai 365 jours représentés sur un axe de 400 pixels environ, et ca me dessine un trait continu, au lieu de chiffres.
    Si je teste sur 25k pixels, les chiffres apparaissent bien

    J'aimerais avoir un truc du genre 0 - 50 - 100 - 150 - ... - 365.

    Au niveau de Cewolf, je ne trouve pas de propriété qui corresponde à cela.
    Je poursuis mes recherches.
    Merci d'avance.

  14. #14
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Dans ta JSP il faut que tu mettes 4 fois le code suivant:

    Citation Envoyé par Pwill
    <logic:present name="<%=com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY%>">
    <jsp:useBean id="pageViews" class="com.scot.wipp.GraphicISProducer"/>
    <cewolf:chart id="line" title="Indice de stress hydrique pour les vignes" type="line" xaxislabel="Jours" yaxislabel="Indice de Stress">
    <cewolf:data>
    <cewolf:producer id="pageViews">
    <cewolf:param name="tabISYear" value="<%=com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY%>" />
    <cewolf:param name="labelScenario" value="<%= (float[]) session.getAttribute(com.scot.wipp.Constants.METEO_IS_YEAR_GRAPH1_KEY) %>" />
    </cewolf:producer>
    </cewolf:data>
    </cewolf:chart>
    <p>
    <cewolf:img chartid="line" renderer="cewolf" width="800" height="600"/>
    <P>


    </logic:present>
    Effectivement il faut que tu definisses 4 classes pour chaque graphe... A moins que tu arrives à factoriser ton code dans une.. (ca doit etre possible avec un param. de plus)
    Ensuite tu crées un actionForm possédant 8 attributs car tu as deux tableaux par graphes..En locurence, de type tableau.
    rem :

    Par rapport, à tes tableaux, tu peux definir une classe qui representerai les données d'un tableau ... Tu n'aurais plus qu'un parametre à passer à ton graph.


    Dans ton action tu initialises les attributs de ton actionForm.
    Dans ta JSP, tu peux via un scriptlet ou directement avec les tags Struts(à voir) tu passes chaque tableau au graphe correspondant de la meme facon que ce dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     <cewolf:producer id="pageViews">
    			<cewolf:param name="tabISYear" value="<%=//acces aux attributs de ton actionForm%>" />
    			<cewolf:param name="labelScenario" value="<%= //acces aux attributs de ton actionForm %>" />    
     </cewolf:producer>
    Et normalement tu devrais avoir tes 4 graphes s'afficher.

    Pour ce qui concerne ta deuxieme question...la j'avoue que je ne sais pÔ..

    J'ai regardé sur le site de CEWOLF.. dans la javadoc, le tutorial... mais rien que ne parle de modification d'échelle..
    Je donne ma langue au chat..

    Toujours pareil si tu as des questions....

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Merci pour tous tes conseils
    Ca fonctionne bien

    Enfin je n'ai toujours pas trouvé comment régler ce problème d'echelle ou plutôt d'affichage en fait.

    Encore merci !!

  16. #16
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Content d'avoir pu t'aider!!

    Je vais regarder de mon coté pour le probleme d'echelle ... si je trouve une soluce ... je te previens!

    Bonne continuation!

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Par défaut
    Hello,

    je pense que la solution doit être du côté de JFreeChart, seulement je ne l'utilise pas directement... j'ai uniquement un dataset et Cewolf fait le boulot ^^


  18. #18
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Tu as surement raison..Par curiosité je regarderai...

  19. #19
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut Keys not resolved
    En fait je veux faire a peu pres meme chise que vous jai travaillé sur votre code or ds ma datasetproducer il me dit "keys not resolved "
    en faite il les reconnait pas quand on les retourne de la "chart.jsp" (jsp ou il y a les tag cewolf) vers la classe de dataset

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/07/2007, 21h24
  2. Organisation de l'output de plusieurs graphes
    Par Sirdouille dans le forum MATLAB
    Réponses: 5
    Dernier message: 15/06/2007, 15h00
  3. Créer plusieurs graphes avec leurs coordonnées (X-Y).
    Par MisterX83 dans le forum MATLAB
    Réponses: 3
    Dernier message: 17/04/2007, 17h16
  4. [C#][SVG] Combinaison de plusieurs graphe sur une même page
    Par doudoustephane dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/11/2006, 09h19
  5. créer plusieurs graphes dans le meme rapport
    Par err dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 11/08/2006, 17h15

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