Bilder aus Datenbank dynamisch in JSF streamen

norm

Mitglied
Hallo Community,

ich bin relativ neu in der JSF-Welt, habe baer schon eingie Erfahrung im Bereich Java EE.

Ich hänge nun an foolgendem Use-Case:

Eine Bean liefert eine Collection mit einer unbekannten Anzahl von Image-Objekten (selbstdefinierter Datentyp) via JPA aus einer Postgres-Datenbank.
Diese Image-Objekte enthalten byte-Arrays, die die eigentlichen Bilder repräsentieren.
Nun brauche ich eine JSF-Seite die dynamisch diese Bilder anzeigen kann, also für eine unbestimmte Anzahl von Bildern.

Zum anzeigen der Bilder kommen ja PrimeFaces in Frage:
[XML]<p:graphicImage value="#{dynamicImageController.chart}" />[/XML]

Kann ich in einem JSF über eine Collection iterieren und dann für jedes Objekt so ein graphicImage-Tag erzeugen?

Gruß
 

norm

Mitglied
Vielleicht habe ich mich zu kompliziert ausgedrückt:

Ist es möglich ein Bild im JSF anzuzeigen, ohne dass dieses Bild als File im Dateisystem vorliegt?
 

JimPanse

Bekanntes Mitglied
oder meintest so was:
Java:
<c:forEach items="#{dynamicImageController.charts}" var="chart">
             <p:graphicImage value="#{chart}" />
</c:forEach>

Wenn ich mir das PrimeFaces BSP anschaue müsstest du anstatt

Java:
 private StreamedContent chart;
eine list haben:
Java:
 private List<StreamedContent> charts;

oder sollen die Bilder (byte[]) erst beim aufruf der Seite umgewandelt werden???
 

norm

Mitglied
oder meintest so was:
Java:
<c:forEach items="#{dynamicImageController.charts}" var="chart">
             <p:graphicImage value="#{chart}" />
</c:forEach>

Wenn ich mir das PrimeFaces BSP anschaue müsstest du anstatt

Java:
 private StreamedContent chart;
eine list haben:
Java:
 private List<StreamedContent> charts;

oder sollen die Bilder (byte[]) erst beim aufruf der Seite umgewandelt werden???

Also so wie es da oben steht, habe ich es versucht! Die Bilder liegen ja schon als BLOBS in der DB vor.
Leider scheint es mit dem graphicImage Tag nicht zu gehen, da dieses als Value nur einen pfad zu der datei im dateisystem entgegennimmt.

meine recherchen zum thema stream servlet sind im sande verlaufen, vielleicht fehlt mir das allgemeine verständnis zu servlets?! :bahnhof:

RichFaces bekomme ich nicht zum laufen auf dem glassfish.... :bahnhof:

wundert mich dass das so kompliziert ist, ist doch nicht mehr so ungewöhnlich bilder in dbs zu speichern, oder? ich würde es ja auch im filesystem machen aber mir sind diesbezüglich mehr oder weniger die hände gebunden...
 

norm

Mitglied
Hallo Mädels,

ich habe es nun mit PrimeFaces gelöst:

Das Facelet enthält:
[XML]
<p:graphicImage value="#{ImageLoader.content}" title="aImage" alt="Image Test!"/>
[/XML]

Dazugehörige Bean:
Java:
@Named(value="ImageLoader")
@Stateless
public class ImageLoader {
    
    @Inject
    private ImageFacade imgFacade;
    
    private StreamedContent content;

    public StreamedContent getContent() {
        return content;
    }

    public void setContent(StreamedContent content) {
        this.content = content;
    }
    
    @PostConstruct
    public void loadImage(){
        //JPA-Aufruf
        List<Image> findAll = imgFacade.findAll();
        //1. Bild laden
        byte[] imagedata = findAll.get(0).getImagedata();
        content = new DefaultStreamedContent(new ByteArrayInputStream(imagedata), "image/jpeg");
    }
}

Gruß und danke!
 

norm

Mitglied
Hallo Community,

ich nochmal!

Also wie gesagt, dass anzeigen eines einzelnen Bildes funktioniert nun.
Aber leider funktioniert das iterieren über eine Collection aus Bildern nicht.

Ich habe sowohl

[XML]
<ui:repeat value="#{ImageLoader.allImages}" var="image">
<p:graphicImage value="#{image}" alt="Hier sollte ein Bild sein" />
<br/>
</ui:repeat>
[/XML]

als auch

[XML]
<c:forEach items="#{ImageLoader.allImages}" var="image">
<p:graphicImage value="#{image}" alt="Hier sollte ein Bild sein" />
<br/>
</c:forEach>
[/XML]

ausprobiert. Bei der forEach Variante wird der Getter von allImages in einer Endlosschleife aufgerufen, bei der repeat Variante wird nur der Alternativtext ausgegeben...

Die zugehörige Bean sieht so aus:

Java:
@Named(value = "ImageLoader")
@Stateless
public class ImageLoader {

    @Inject
    private ImageFacade imgFacade;
    
    private List<StreamedContent> allImages = new ArrayList <>();
    
    private StreamedContent oneImage;

    public StreamedContent getOneImage() {
        List<Image> findAll = imgFacade.findAll();
        byte[] imagedata = findAll.get(0).getImagedata();
        StreamedContent retVal = new DefaultStreamedContent(new ByteArrayInputStream(imagedata));
        return retVal;
    }

    public void setOneImage(StreamedContent oneImage) {
        this.oneImage = oneImage;
    }

    public List<StreamedContent> getAllImages() {
        List<Image> findAll = imgFacade.findAll();
        Logger.getLogger(ImageLoader.class.getName()).log(Level.INFO, "### COUNT: {0}", findAll.size());
        for (Image image : findAll) {
            byte[] imagedata = image.getImagedata();
            allImages.add(new DefaultStreamedContent(new ByteArrayInputStream(imagedata)));
            Logger.getLogger(ImageLoader.class.getName()).log(Level.INFO, "### Added Image {0}", image.getImagename());
        }
        return allImages;
    }

    public void setAllImages(ArrayList<StreamedContent> allImages) {
        this.allImages = allImages;
    }
}

Sieht jemand das Problem?

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JSF Bilder aus CSS Datei werden nicht angezeigt. Web Tier 2
H JSF jsf/sessionScoped Bean - Bilder (jpg) werden nicht richtig dargestellt Web Tier 1
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
H im IE werden leere Bilder mit X gekennzeichnet Web Tier 4
K Bilder nach dem Upload nutzen Web Tier 10
K Bilder in Java-Webapplikationen Web Tier 12
M Bilder in Servlets Web Tier 8
M JSP Custom Tag für Bilder Web Tier 14
D Bilder werden nicht angezeigt Web Tier 2
D Bilder werden nicht angezeigt Web Tier 21
H Vorgehensweise: Bilder anzeigen/erstellen in JSP/Servlet ? Web Tier 3
N JSF: Servlet für Bilder: Verbindung zu Spring Service ? Web Tier 1
S Einträge aus Datenbank einzeln darstellen (JSP, JAVA, HTML) Web Tier 9
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
J Datenbank optimal zu nutzen Web Tier 8
L Servlet Datenbank Web Tier 0
M JSP Mit JSP eine SQLite Datenbank editieren? Web Tier 1
X SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern? Web Tier 4
R Bild aus Datenbank ausgeben/anzeigen Web Tier 5
P JSF Datenbank Probleme (Limit, Wiederholung) Web Tier 8
J Loginbereich mit Session und Datenbank Web Tier 5
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
N Tabelle dynamisch mit Daten aus Datenbank füllen Web Tier 3
I Servlet connected nicht zur Datenbank Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
N JSF-Tabelle erstellen aus Datenbank mittels JDBC Web Tier 12
S Dynamisch Drop-Down Menüs und Formular Feld Bindings Web Tier 4
F JSF - Seiteninhalt dynamisch laden Web Tier 5
J JSF statisch oder dynamisch? Web Tier 3
A JSF JSF Page dynamisch/modular aufbauen Web Tier 7
T Tomcat: Packete dynamisch auslesen und Klassen erzeugen Web Tier 3
S Servlet Dynamisch Content? Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben