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

JSF Java Discussion :

Afficher une image à partir d'un Blob


Sujet :

JSF Java

  1. #1
    Membre habitué Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Points : 150
    Points
    150
    Par défaut Afficher une image à partir d'un Blob
    Bonjour,

    j'ai un blob (une image) que je récupère de la BD et je voudrais l'afficher dans une page JSF, et je ne sais pas quoi faire !

    Merci d'avance
    bien cordialement

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Le problème de l'image, c'est qu'elle nécessite une deuxième requete au serveur. Les options sont

    - faire une servlet qui sert l'image (pas très jsf comme solution)
    - utiliser http://myfaces.apache.org/sandbox/tl...geDynamic.html qui permet de fournir une image via un "renderer"
    - utiliser http://livedemo.exadel.com/richfaces...ediaOutput.jsf qui permet d'utiliser des propriétés d'un bean pour dessiner une image
    - créer un composant custom qui fait tout çà.

  3. #3
    Membre habitué Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Points : 150
    Points
    150
    Par défaut
    salut,

    Merci beaucoup pour ta réponse tchize_ ,

    je crois que je vais opter pour la deuxième solution, càd utiliser un renderer,
    mais comment faire pour avoir le renderer, parce que mon Blob je l'ai apporté de la BD,
    il ne reste qu'à faire les traitements nécessaires pour l'afficher, seulement je ne sais ce que je dois faire pour ça

    Merci d'avance
    Bien cordialement

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    pour sandbox, si tu cherche bien dans les télécharghement, y a une webapp d'exemple, doit y avoir un example pour l'image en question. Sinon il reste que la doc tld et du courage Parce qu'il y a rien dans le wiki.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Solution ?
    Salut reeda,

    je voulais savoir si tu avais trouvé une solution car j'ai le même problème que toi. Si oui peux tu la poster pour que tout le monde puisse y avoir accès ?

    Cela fait 2 semaines que je suis dessus et je n'ai aucun résultat. Tous les forums que je vois disent ok ca fonctionne maintenant mais ne donne pas la réponse finale.

    Merci par avance, bien cordialement

  6. #6
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    moi j'utilise jboss seam qu'il fournit un composant très facile a utiliser c'est le <s:graphicImage>
    qui permet d'afficher une image de la base de données.
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut j'utilise pas jboss
    Salut anisj1m,

    merci pour ta réponse, ça serait cool si c'était aussi facile mais j'utilise pas Jboss seam. J'utilise ADF. Je n'ai donc qu'à priori : <af:activeImage> ou <af:image>.

    Si tu as d'autres solutions je suis toujours preneur

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut help help help
    J'ai trouvé graphic image. Comment tu l'utilises ? Cela fonctionne avec une URL ? Comment tu le lies à la BD ?
    Merci pour tes conseils

    Cordialement

  9. #9
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    est ce que tu parle de <h:graphicImage> ?
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    oui exactement.

  11. #11
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    non tu ne peux pas afficher une image blob avec <h:graphicImage> car cette dernière tag impose que l'image a utiliser doit être dans le chemin relatif de ton projet web, en d'autre mots sous votre webcontent.
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    On m'a conseillé de repartir sur le type de fichier ORDImage. Je voulais savoir avec quel composant je pourrai l'afficher dans une page JSF. J'utilise Jdev11g et ADF BC. Apparemment j'arrive à uploader l'image mais pas à l'afficher.
    Aurais tu une idée?

    Merci pour le dernier post

  13. #13
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    bien sure tu peux avoir l'image par un stream par exemple mais fais attention,
    comme je t'ai dis h:graphicImage ne peux pas l'afficher.
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    le plus simple étant de faire une servlet qui sert le blob en question, puis de pointer h:graphicsImage sur cette servlet.

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    J'ai envie de vous montrer ce que j'ai fait. J'ai travaillé sur 2 types de données différentes : BLOB et ORDImage.
    Je souhaiterais afficher les images de la base de données et mettre aussi un inputfile pour pouvoir les uploader.

    Q1 : Je souhaiterai avant tout savoir quel est le type de données le plus simple à mettre en place (BLOB ou ORDImage).

    Suite à cela je vous enverrai le code pour savoir où peut se trouver l'erreur.

    Merci

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    J'utilise en ce moment le type ORDImage. Ceci me permet de pouvoir uploader. Je vois ce lien dans ma page JSF :

    Pour voir ce lien j'utilise ceci dans ma page JSF : OrdImageDomain:image/png:13418

    <af:outputText value="#{row.Image}"/>


    et pour uploader j'utilise ceci :

    <tr:inputFile value="#{bindings.Image.inputValue}" simple="true">
    <f:validator binding="#{bindings.Image.validator}"/>
    <binding:convertOrdDomain bindingRef="#{bindings.Image}"/>
    </tr:inputFile>

    Il me "suffirait" de convertir en image mais lorsque je convertis cela me donne rien. Je dois sûrement faire une servlet pour convertir mais j'ai beau programmer cette servlet de toute les manières je n'arrive à rien.

    Si vous avez la moindre idée, je jsuis preneur, j'ai encore beaucoup de travail sur ce projet après ça et ça m'énerve de coincer là dessus...

    Merci de votre aide

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    tu dois écrire une servlet qui

    - se connecte à la base de donnée
    - fait un select pour avoir ton blob
    - lit le contenu du blob
    - l'écrite dans le response.getOutputStream()

    Ensuite, dans ta page jsf tu met un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:graphicImage value="maServletImage?imageId=#{monBean.imageId}"/>

  18. #18
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    j'ai le même problème. Ma servlet est la suivante :

    ***********************
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    package com.oracle.micc.image;
     
     
    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.sql.Blob;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;
     
    public class ImageServlet extends HttpServlet {
        private static final String CONTENT_TYPE = 
            "image/jpg; charset=utf-8";
     
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
        }
     
        public void doGet(HttpServletRequest request, 
                          HttpServletResponse response) throws ServletException, 
                                                               IOException {
            response.setContentType(CONTENT_TYPE);
            response.setContentType(CONTENT_TYPE);
            //String detailProductId = request.getParameter("detail");
            String thumbnailProductId = request.getParameter("thumbnail");
            boolean thumbnail = true;
            String productId = null;
            OutputStream os = response.getOutputStream();
            Connection conn = null; 
     
            try {
                Context ctx = new InitialContext();
                DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/miccroom");
                conn = ds.getConnection();
                PreparedStatement statement = conn.prepareStatement(
                  "SELECT IMAGE, " + 
                  "FROM  Room " );
     
            /*    if (detailProductId != null) {
                    productId = detailProductId;
                    thumbnail = false;
                } else {
                    productId = thumbnailProductId;
        
                } */
     
                statement.setString(1,(thumbnail ? "Y" : "N"));            
                statement.setInt(2, new Integer(productId));
                ResultSet rs = statement.executeQuery(); 
     
                if (rs.next()) { 
                    Blob blob = rs.getBlob("IMAGE"); 
                    BufferedInputStream in = new BufferedInputStream(blob.getBinaryStream()); 
                    int b; byte[] buffer = new byte[10240]; 
                    while ((b = in.read(buffer, 0, 10240)) != -1) { os.write(buffer, 0, b); } 
                    os.close();
                }
            } catch (Exception e){
                System.out.println(e);
            } finally {
                try{
                    if (conn != null){
                         conn.close();
                    }
                 } catch (SQLException sqle){
                     System.out.println("SQLException error");
                 }  
            }
        }
    }
    ***************
    Dans ma page jsf cela donne ça (il me signale pas d'erreur mais je sais que c'est pas bon car je n'ai pas le ".image" à la fin).

    <h:graphicImage value="ImageServlet?image=#{imageservlet}"/>

    ps : je ne l'ai pas déclaré dans le web.xml, il me semble que je dois le faire... et je ne suis pas sûr de la syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <servlet>
            <servlet-name>images</servlet-name>
            <servlet-class>com.oracle.micc.image.ImageServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>images</servlet-name>
            <url-pattern>/render_images</url-pattern>
        </servlet-mapping>


    Merci de m'aider

  19. #19
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Dans l'ensemble, mis à part que ta requet SQL est du n'importe quoi, c'est l'idée. Par contre, dans le h:graphicsImage, tu dois pointer vers une url qui correspond à l'url pattern de ton web.xml.

  20. #20
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Je suis un noob monsieur le modérateur, j'ai besoin d'un peu plus d'aide si c'est possible avant que je craque complètement.

    Q1 : A quoi sert l'URL puisque je souhaite prendre les fichiers dans ma base de données. Je ne dois pas mettre un chemin vers des images de mon explorateur Windows.

    De plus je ne sais pas du tout comment l'utiliser dans la source de mon graphicImage.

    Q2 : Suis-je obligé d'utiliser graphicImage ? Qu'a t'il de plus que <af:image> ?

    Pour le SQL, j'ai une table room dans laquelle j'ai 4 attributs : idroom, roomname, capacity, image. Je souhaiterais prendre que l'attribut image.

    Q3 : Dois-je utiliser un Where obligatoirement ? Si oui, je ne vois pas comment l'utiliser.

    Requête SQL :
    PreparedStatement statement = conn.prepareStatement(
    "Select RoomEO.IMAGE FROM ROOM RoomEO");


    Merci
    Cordialement

Discussions similaires

  1. [MySQL] Afficher une image à partir stockée en base de données
    Par arti2004 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 21/06/2011, 19h40
  2. [SQL-Server] comment afficher une image à partire d'un Blob sql server
    Par assousoft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/09/2010, 22h46
  3. [VB6][CR 8.5]Afficher une image à partir d'une BD.
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/03/2006, 09h33
  4. [MySQL] Afficher une image d'un champ blob d'une base MySQL
    Par lolobedo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/11/2005, 10h10
  5. afficher une image à partir d'une base de données access
    Par zidenne dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/11/2005, 11h41

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