Wie zu verwenden <p:graphicImage> mit DefaultStreamedContent in einem ui:repeat?
Ich versuchte display ein panel, wo der Benutzer sehen kann, eine Liste der Elemente, die der Kategorie(als Bild dargestellt) und klicken Sie anzeigen können Produkte innerhalb der Kategorie(Bilder werden angezeigt)
Zur Anzeige der item-Kategorie, habe ich das ui:repeat nad die Unterstützung bean-calss
Unten ist mein xhtml code
<ui:repeat id="repeat" value="#{getData.images}" var="img" varStatus="loop">
<h:panelGroup>
<p:graphicImage id="img1" value="#{img}" alt="image not available" >
</p:graphicImage>
</h:panelGroup>
</ui:repeat>
Die Managed-Bean-Code-Teile
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private List<StreamedContent> imageList = new ArrayList<StreamedContent>();
public List<StreamedContent> getImages(){
for (int i = 0; i < sdh.getNumOfImages(); i++) {
imageID = imageIDArray.get(i);
ImageService imgSer = new ImageService();
imgList.add(imageID);
imgSer.setData(imageID);
baos = imgSer.getImage();
try {
imageList.add(new DefaultStreamedContent(new
ByteArrayInputStream(baos.toByteArray())));
} catch (Exception ex) {
ex.printStackTrace();
}
}
imageNum = 0;
return imageList;
}
public StreamedContent getData() {
baos = imageList.get(imageNum);
//imageList.add(baos);
imageNum++;
return new DefaultStreamedContent(new ByteArrayInputStream(baos.toByteArray()));
}
Nun mein problem, wenn ich die nicht kommentieren Sie die 'imageList.add(baos)' in 'getData', die Bilder werden nicht angezeigt.
Jetzt habe ich wirklich wissen will, wie die 'ui:repeat" funktioniert, da die 'imageList' mit den Bildern und ich kann speichern, wenn erforderlich, entweder in der Methode. Wenn ich eine Feste Anzahl angegeben (ex:'imageList.get(0)') in der "getData" - Methode dann das gleiche Bild zeigen, mehrere Male. Wo, wie, wenn ich die 'imageNum' ohne 'imageList.add(baos)' werfen Fehler 'Fehler beim streaming von dynamischen Ressource'
Ich müde Björn Pollex Vorschlag und die notwendigen änderungen vorgenommen, aber jetzt die Bilder nicht angezeigt
- Sie verweisen nicht die loop-variable (
img
in deinem Fall) in Ihren<ui:repeat>
. IhregetImages
zurückgeben sollte eineList<StreamedContent>
, und Ihre<p:graphicImage>
solltevalue="#{img}"
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht möglich
<p:graphicImage>
diese Weise. Sie sollten vielmehr Durchlaufen Sie eine einzigartige Sammlung von Bild-IDS, die nicht über eine Sammlung vonStreamedContent
. Jene einzigartige Bild-IDS haben, dann übergeben werden, als<f:param>
zu<p:graphicImage>
was wiederum generieren Sie die richtigen URLs für den browser.Ihre
#{data}
managed bean muss Sie einfach haben:Den
#{imageStreamer}
sollten einen separaten application-scoped managed bean, die sehen grundsätzlich so aus:Du benutzt falsche ui:repeat-tag. Sie haben var-Attribut, aber Sie können nicht verwenden Sie diese in p:graphicImage-tag ein value-Attribut.Finden Sie ein Beispiel für die Verwendung