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 :

Affichage d'infos bulles :Jfreechart et encodage Base64


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut Affichage d'infos bulles :Jfreechart et encodage Base64
    Bonjour,


    J'utilise Struts2 et je souhaite afficher les infos bulles sur les courbes basées sur JfreeChart,

    voici le code qui me permet d'afficher la courbe en png

    Dans mon 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
     
    public class XXXAction extends ActionSupport {
     
       ByteArrayOutputStream content = new ByteArrayOutputStream();
     
       public String execute() {
         xydataset = createDataset();
         ...
         JFreeChart chart = createChart(xydataset);
         ....
         ChartUtilities.writeChartAsPNG(content, chart, width, height);
          return "succes";
      }
     
    }


    dans le struts.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    <action name="XXXPng" class="XXXAction" 	method="execute">
    	<result type="stream">
    		<param name="contentType">images/png</param>
    		<param name="inputName">content</param>
    	</result>
    </action>

    Pour la jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ......
    <form name="xxx" method="get" action="">
         ........
        <img id="chart" src="XXXPng?param1=${X01}&....&width=700&height=500" />
    </form>

    Je suis à la recherche d'une solution qui me permettrai d'afficher les infos bulles, valeurs (x,y)

    -->l'axe des X n'est pas toujours de type Date.

    j'ai trouvé ce Package: org.jfree.chart.imagemap qui permet la creation de: HTML image maps. où ils utilisent la méthode writeImageMap de la classe ImageMapUtilities

    mais je n'ai pas encore trouver comment je pourrait l'utiliser dans mon cas et que dois-je mettre dans le fichier de config. struts.xml à la place de content et de "images/png"

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    Après quelques recherches, je n'ai toujours pas trouvé mais je crois que cela n'a rien à voir avec Struts.

    il va falloir que j'utilise dans mon action la méthode:

    ChartUtilities.writeImageMap(PrintWriter writer, String name,ChartRenderingInfo info, boolean useOverLibForToolTips);
    ou
    ChartUtilities.getImageMap(String name, ChartRenderingInfo info);

    qui prend un
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

    et un :
    Writer de type PrintWriter ( Je dois peut être utilisé l'objet OUT ["JSPWriter"] de chacune des jsp, pour l'instant je ne sais pas comment)

    je vais aussi passer par la transformation de mes data en Base64 en passant par le code:

    myData64 = Base64.encodeBase64String(content.toByteArray()); // content est défini plus haut

    dans la jsp donc je dois avoir quelques choses qui ressemble à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <map name="myMap"> </map>
    <img src="data:image/png;base64,${myData64}" usemap="#myMap">
    Pour le Data64 voir : http://en.wikipedia.org/wiki/Data_URI_scheme

    C'est dans ma JSP que je dois faire un traitement du genre
    writeImageMap(PrintWriter writer, String name,ChartRenderingInfo info, boolean useOverLibForToolTips);

    Vu que je n'ai pas accès au writer au niveau de mon action et que je dois le créer probablement au niveau de la jsp où je pourrait en principe accèder à l'objet OUT.

    Je vais voir cette discussion : http://www.developpez.net/forums/d36...graphique-jsp/


    J'ai fait ça dans la jsp, ça m'affiche la courbe en tout petit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <%
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
            
            ChartUtilities.getImageMap("normaleMap", info);
            //ChartUtilities.writeImageMap(out, normaleMap, info, true);
            
    %>
    <map name="normaleMap"></map> 
     
     
    <img src="data:image/png;base64,${normaleData64}" usemap="#normaleMap" >

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut
    De mon action, je ne renvoie plus que le chart

    dans la jsp je rajoute ce code :
    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
     
    <%@ page pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    <%@ taglib tagdir="/WEB-INF/tags" prefix="b"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <html>
    <head>
    <title>Mon titre</title>
    </head>
    <body>
     
    <s:actionmessage/>
    <form name="normale" method="get" action="">
    ....
    ....
    <b:chart value="${chart}" />
    </form>
    </body>
    </html>

    j'ai créé ce taglib (chart.tag) qui va recevoir l'objet chart et le traiter

    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
     
    <%@ tag body-content="scriptless" pageEncoding="UTF-8"
    	trimDirectiveWhitespaces="true"%>
    <%@ tag import="org.jfree.chart.entity.StandardEntityCollection"%>
    <%@ tag import="org.jfree.chart.*"%>
    <%@ tag import="java.io.PrintWriter"%>
    <%@ tag import="org.jfree.chart.entity.EntityCollection"%>
    <%@ tag import="java.io.BufferedWriter" %>
    <%@ tag import="java.io.OutputStreamWriter" %>
    <%@ tag import="java.io.ByteArrayOutputStream" %>
    <%@ tag import="org.apache.commons.codec.binary.Base64" %>
    <%@tag import="java.io.Writer"%>
     
    <%@ attribute name="value" description="Objet JFreeChart"
    	required="true" type="org.jfree.chart.JFreeChart"%>
    <%@ attribute name="width" required="false" type="java.lang.Integer"%>
    <%@ attribute name="height" required="false" type="java.lang.Integer"%>
     
    <%
            int height = this.height == null ? 530 : this.height;
            int width = this.width == null ? 730 : this.width;
            
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
            ByteArrayOutputStream content = new ByteArrayOutputStream();
            ChartUtilities.writeChartAsPNG(content, this.value,width, height, info);
            String normaleData64 = Base64.encodeBase64String(content.toByteArray());
            ChartUtilities.writeImageMap(new PrintWriter(out), "normaleMap", info, false);
    %>
     
    <img src="data:image/png;base64,<%=normaleData64%>" usemap="#normaleMap" border="0" width="<%=width%>" height="<%=height%>" />

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 76
    Points : 80
    Points
    80
    Par défaut ToolTips et encodage base64
    Est ce qu'il y a une autre manière de faire (sans le base64)?

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

Discussions similaires

  1. Affichage des infos-bulle
    Par midotoon dans le forum Jasper
    Réponses: 1
    Dernier message: 19/08/2008, 09h48
  2. Affichage info-bulle non correct suivant le navigateur
    Par [ced] dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 18/06/2008, 09h38
  3. Aide sur l'affichage d'une bulle d'info svp
    Par Zan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 00h01
  4. Problème affichage info-Bulle
    Par FabienN dans le forum IHM
    Réponses: 4
    Dernier message: 16/03/2006, 15h02

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