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
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
Mon Blog : chbihi-reda.blogspot.com
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 çà.
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
Mon Blog : chbihi-reda.blogspot.com
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 courageParce qu'il y a rien dans le wiki.
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
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.
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
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
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.
oui exactement.
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.
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
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.
le plus simple étant de faire une servlet qui sert le blob en question, puis de pointer h:graphicsImage sur cette servlet.
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
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
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}"/>
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
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.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager