JSF Bild aus BLOB in <h:graphicImage> tag darstellen

Bad_Law

Mitglied
Hallo

ich habe ein Bild als BLOB aus einer Datenbank und möchte es in einem <h:graphicImage> tag darstellen...
welche objekte kann ich hierzu verwenden habe es bis jetzt mit ImageIcon und BufferedImage probiert war aber leider erfolglos...

ein Workaround wäre das Bild temporär irgendwo zu speichern aber ich würde es gerne direkt aus dem Servlet an die Seite schicken...


Vielen Dank im Vorraus
 
Zuletzt bearbeitet:
so langsam habe ich die Befürchtung das das Tag die falsche Wahl ist aber ich finde keine Alternative....
 
Problem gelöst!
Tag war die richtige Wahl nur der Ansatz leider falsch man muss aus dem <h:graphicImage> Tag ein Servlet aufrufen das die Daten zurücksendet.

Code:
public class ImageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
		try {
			DBConnection con = new DBConnection();
			Blob bl = con.getImageFor(Integer.parseInt(request.getParameter("id")));

			response.setContentType("image/jpeg");

			MemoryCacheImageInputStream input = new MemoryCacheImageInputStream(bl.getBinaryStream());

			BufferedImage image = ImageIO.read(input);

			OutputStream out = response.getOutputStream();
			ImageIO.write(image, "jpg", out);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 
Hallo zusammen,
dieses Thema ist zwar schon etwas alt, ich stehe aber vor dem selben Problem. Den geposteten Code verstehe ich zwar im großen und ganzen, nur weiß ich leider nicht wie ich aus dem Tag <h:graphicImage> heraus dieses Servlet aufrufe.
Für ein bisschen Code wäre ich dankbar!

Gruß
andthi
 
Hi,
du gibst in dem Tag die URL des Servlets an der Stelle an an die normalerweise die URL des Bildes gesetzt würde. Das Servlet macht nichts anderes als das Bild aus der DB zu lesen und auf den Stream zu schieben.
Bilder werden immer mit eigenen Requests angefordert, d.h. es macht für den Browser keinen unterschied ob die Anfrage direkt vom Webserver beantwortet wird und dieser das Bild zur als Binärstream zum Browser schickt oder ob ein Servlet diesen Job übernimmt. Daher ist die art des zugriffs auch die gleiche
 
Zuletzt bearbeitet:
Zurück