Bonjour tout le monde,
j'ai un petit problème d'affichage d'image.jpg dans mon navigateur. j'ai creuser quelques forums, et je me suis casser la tête, j'en ai des cheveux blancs. j'ai dans ma base de données des images (BLOB), et quelques champs que je recupère dans une classe que j'appelle Base (que je peux ouvrir et fermer) comme ceci:
et j'ai aussi un bean pour recuperer mes champs depuis la base de donnée, voici mon bean ci dessous:
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 public ArrayList<Article> listerArticle() { ArrayList<Article> res = new ArrayList<Article>(); String sql = "select * from t_article"; PreparedStatement ps = null; ResultSet rs = null; try { ps = connection.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { Article l = new Article(); l.setNom(rs.getString("nom")); l.setDescription(rs.getString("description")); l.setPrix(rs.getFloat("prix")); l.setPhoto(rs.getBinaryStream("photo")); res.add(l); } } catch (SQLException e) { System.out.println("Erreur listerArticles " +e.getMessage()); e.printStackTrace(); } try {if (ps != null) ps.close();} catch (Exception e) {} try {if (rs != null) rs.close();} catch (Exception e) {} return res; }
pour ma page jsp, je procede comme ceci, car j'aimerais affiché chaque photo avec son nom pour un premier temps, voici le code de 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 public class Article { private Integer id_article; @NonVide(mess="Le champ photo doit être rempli") private InputStream photo; @NonVide(mess="Le champ nom doit être rempli") private String nom; @NonVide(mess="Le champ description doit être rempli") private String description; // titre ; annee ; @NonVide(mess="Le champ prix doit être rempli") @EstEntier(expr="[[0-9] [.]]++", mess="Le champ prix ne doit contenir que des chiffres") private Float prix; public Integer getId_article() { return id_article; }
le problème cependant est que le navigateur n'affiche qu'une seule image (la première de la BDD), et rien d'autre, même pas les noms.
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 <%@page import="java.io.FileInputStream"%> <%@page import="javax.imageio.ImageIO"%> <%@page import="java.io.File"%> <%@page import="java.awt.image.BufferedImage"%> <%@page import="java.io.FileOutputStream"%> <%@page import="java.io.PrintWriter"%> <%@page import="java.io.OutputStream"%> <%@page import="java.io.BufferedOutputStream"%> <%@page import="java.io.BufferedInputStream"%> <%@page import="java.io.InputStream"%> <%@page import="bean.Article"%> <%@page import="java.util.ArrayList"%> <%@page import="base.Base"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Lister livres</title> </head> <body> <jsp:include page="../commun_page_menu/menu.jsp" /> <jsp:include page="../commun_messages/messages.jsp" /> <h3> <% out.println("Liste des livres"); %> </h3> <ul> <% Base base = new Base(); base.ouvrir(); ArrayList <Article> lst = base.listerArticle(); base.fermer(); for (Article l : lst) { out.println("<li>"+l.getNom()+"</li>"); response.setContentType("image/jpeg"); BufferedInputStream bis = new BufferedInputStream(l.getPhoto()); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); int c; while ((c = bis.read()) != -1) { bos.write(c); } bos.flush(); }
PLEASE HELP ME!!!!!!!
Partager