JSF Bild aus DB in JSF darstellen

markai

Aktives Mitglied
Habe es gestern geschafft zu meinen User Entities mittels FileUpload ein .png Bild in meine (derby) DB zu speichern. Das Bild liegt nun als byte[] in meiner DB.

Java:
@Entity @Table(name="Users")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    ...
    @Column @Lob
    private byte[] photo;

Nun würde mich interessieren wie ich dieses byte[] wieder in ein png umwandeln, und dieses dann in JSF anzeigen lassen kann.
 

Fant

Bekanntes Mitglied
Ich würde mir dafür ein Servlet schreiben und dann etwa in einem <h:graphicImage> auf das Servlet verweisen.

Die Byte-Folge schreibst du in einen geeigneten InputStream und diesen dann in ein BufferedImage.
 

markai

Aktives Mitglied
Ja ich schon wieder. Was Java EE angeht bin ich leider noch ein ziemlicher Dummkopf. Jedenfalls hatte ich heute gerade meine ersten Erfolgserlebnisse wegen des Tipps mit dem Dyna-Image :toll:

Ich danke euch beiden :applaus:
 

markai

Aktives Mitglied
Ein neues Problem ist aufgetaucht: Habe mit dem DynaImage von Primefaces eine Möglichkeit gefunden mein Bild aus der DB zu bekommen und anzuzeigen, aber so wie ich das gemacht habe funktioniert es nur für einen record:

Java:
    public StreamedContent getGraphic() {
        try {
            byte[] byteImg = sessionBean.getCurrentUser().getPhoto();
            BufferedImage image = ImageIO.read(new ByteArrayInputStream(byteImg));
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            ImageIO.write(image, "png", os);
            graphic = new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/png");

        } catch (Exception e) {
            e.printStackTrace();
        }
        return graphic;
    }

(in der sessionBean wird das User Objekt des aktuell eingeloggten Benutzer gespeichert). Nun würde ich gerne über meine Datenbank iterieren und für jeden Datensatz das Bild holen und in einer DataTable anzeigen. Leider funktioniert das mit der obigen Methode so nicht. Wenn für diesen Fall ein Servlet besser wäre hätt ich bitte gerne ein paar Zeilen Code. Steh grad ziemlich aufm Schlauch...
 

JimPanse

Bekanntes Mitglied
Schreib dir eine eigene Komponente + Renderer. Die Komponente erbt von HtmlGraphicImage und erweiterst die Klasse um ein Byte-Feld. Deinen Renderer leitest du von der Klasse ImageRenderer ab und dort machst du die Operation für das byte-feld.

Greetz
 

markai

Aktives Mitglied
Hab mich bei Stackoverflow schlau gemacht. Hat super funktioniert. Danke für den Tipp! Wenn ich nächste Woche mal Zeit hab versuch ich das mit dem HTMLGraphicImage. Momentan reichts aber für meine Zwecke. Danke euch beiden!
 

Ähnliche Java Themen

Neue Themen


Oben