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 depuis une BDD dans une page JSF


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    etudient
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudient

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Afficher une image depuis une BDD dans une page JSF
    Bonjour à tous,
    j'ai une application jee7 avec jpa et jsf comme framework, netbeans comme IDE et Glassfish comme serveur d'application, j'ai une table dans ma BDD (derby) qui s'appelle Événement id, titre et image comme attributs je veux afficher les détailles d'un événement quelqu'un peut m'aider comment je peux récupérer l'image de la BDD et l'afficher dans la page JSF.
    merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    En gros:

    1) définir une servlet qui sera chargée du rendu de l'image
    2) dans le doGet de la servlet, récupérer l'id de l'image à afficher (via paramètre get)
    3) setter un content-type correspondant au type d'image dans la réponse
    4) en utilisant ton dao jpa, récupérer la données de l'image
    5) écrire ces données dans la réponse

    ça, ça permet d'afficher une image

    ensuite, dans les templates d'affichage (html probablement), tu mets une référence à la servlet dans la balise img: <img src="/myservlet?id=1234" alt="" />
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Un petit exemple de Servlet qui fait le boulot.

    En reprenant le code de @Pill_S <img src="/myservlet?id=1234" alt="" />.

    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
     
    public void doGet( HttpServletRequest request, HttpServletResponse response )
    			 throws ServletException
    {
    	String fileName = request.getParameter( "id" );
     
    	InputStream is = getMyFileInputStream( fileName ); // Ici à toi de voir comment tu peux récupérer un InputStream à partir de ta base de donnée.
    	OutputStream os = null;
     
    	try
    	{
    		os = response.getOutputStream();
    		response.setContentType( MimeType.getMimeType( fileName ) ); // Ici c'est une classe perso qui me sert à récup le Type Mime à partir d'une extension de fichier
     
    		byte[] buffer = new byte[ 512 ];
     
    		for( int length = 0; ( length = is.read( buffer ) ) > 0; )
    			os.write( buffer, 0, length );
     
    		os.flush();
    	}
    	catch( Exception e )
    	{
    		e.printStackTrace();
    	}
    	finally
    	{
    		if( os != null )
    			os.close();
     
    		if( is != null )
    			is.close();
    	}
    }
    Reste à voir comment récupérer le contenue de ton image dans ta BDD, mais ça je te laisse faire

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    mouais, sauf le catch, il ne faut pas faire printStackTrace mais propager l'exception, éventuellement wrappée dans une ServletException. comme ça, ça remonte en tant qu'erreur http 500 dans le client
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Oui en effet

    J'ai vite fait modifié une Servlet que j'avais sous la main pour l'exemple mais dans mon cas j'ai des traitements dans le catch. du coup j'ai bêtement mit un printStackTrace()

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pour le type mime, on peut se baser sur FileTypeMap
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Le problème de FileTypeMap c'est qu'il est plus que limité..

    Si ne sait gérer que quelques format les plus courant. Et encore, quand je dis courant, pour un .png il va renvoyer "application/octet-stream"..

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Il semblerait qu'ils aient fait des progrès: http://docs.oracle.com/javase/7/docs...leTypeMap.html, avec activation.jar dans le classpath, ça fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import javax.activation.MimetypesFileTypeMap;
     
    public class Temp {
    	public static void main(String[] args) {
    		System.out.println(MimetypesFileTypeMap.getDefaultFileTypeMap()
    				.getContentType("toto.png"));
    	}
    }
     
    --> "image/png"
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    En effet ... Il me semblait que c'est ce que j’utilisais ... A moins que Tomcat viennent avec une définition des types mime ?
    J'ai retrouvé : ServletContext.getMimeType

    EDIT: S'il en manque, il suffit d'ajouter une balise "mime-mapping" dans le "web.xml" :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <mime-mapping>
      <extension>png</extension>
      <mime-type>image/png</mime-type>
    </mime-mapping>


    Sinon depuis Java 7, il y a Files.probeContentType.
    Exemple:
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (String ext : Arrays.asList(".xml", ".png", ".jpg", ".js")) {
      System.out.printf("%-5s => %s%n", ext, Files.probeContentType(new File(ext).toPath()));
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  10. #10
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Voici la liste des formats supporté par activation.jar

    text/html html htm HTML HTM
    text/plain txt text TXT TEXT
    image/gif gif GIF
    image/ief ief
    image/jpeg jpeg jpg jpe JPG
    image/tiff tiff tif
    image/png png PNG
    image/x-xwindowdump xwd
    application/postscript ai eps ps
    application/rtf rtf
    application/x-tex tex
    application/x-texinfo texinfo texi
    application/x-troff t tr roff
    audio/basic au
    audio/midi midi mid
    audio/x-aifc aifc
    audio/x-aiff aif aiff
    audio/x-mpeg mpeg mpg
    audio/x-wav wav
    video/mpeg mpeg mpg mpe
    video/quicktime qt mov
    video/x-msvideo avi
    Ça va pas péter très loin quand même.

    Après il est tout à fait possible de fournir son propre fichier à MimetypesFileTypeMap avec son propre mapping.

    Au final je me rend compte que j'ai un peu réinventé la roue, puisque sur le fond je fais exactement comme lui..

    Edit : Par contre je prend note pour le mapping dans Tomcat, même si je trouve ça un peu lourd a écrire (ça peu vite polluer le web.xml)

  11. #11
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Edit : Par contre je prend note pour le mapping dans Tomcat, même si je trouve ça un peu lourd a écrire (ça peu vite polluer le web.xml)
    Celui de Tomcat est déjà bien fourni : Tc6/conf/web.xml
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  12. #12
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Oui j'ai vu ça juste après avoir poster

  13. #13
    Futur Membre du Club
    Femme Profil pro
    etudient
    Inscrit en
    Août 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : etudient

    Informations forums :
    Inscription : Août 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci bien pour toutes vos réponses mais j'ai oublié de marquer que je suis débutante en jee donc de ce que vous parlez me semble un peu avancé .pouvez vous me proposer des tutoriels.

  14. #14
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pour afficher une image, il te faut une servlet (sais-tu ce que c'est ?) qui permettra de récupérer l'image via une requête vers ton serveur (exemple d'URL http://serveur.com/application/images/evenements.png?id=1, la servlet devra être mappé sur le "url-pattern" : "images/evenements/*").

    Dans ta page JSF, il te faudra insérer <h:graphicImage value="./images/evenements/image.#{evenement.image.ext}?id=#{evenement.id}" />
    La servlet qui servira les images doit :


    Si tu as peu de connaissance en développement Web avec Java, je te conseille le cours Java "Le développement d'applications web".
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Afficher une image depuis la bdd
    Par CLion dans le forum Langage
    Réponses: 1
    Dernier message: 21/02/2014, 22h29
  2. Afficher les images d'un dossier dans une IHM
    Par danathane dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2008, 15h27
  3. [c#] recuper une image depuis sa BDD
    Par fally dans le forum C#
    Réponses: 3
    Dernier message: 20/03/2008, 10h30
  4. n'affiche pas une image arriere plan definis dans une CSS
    Par mikebranque dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 30/06/2006, 15h54

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