Jak używać <p: graphicImage> z DefaultStreamedContent w interfejsie użytkownika: powtórz?
Próbowałem wyświetlić panel, w którym użytkownik może zobaczyć listę kategorii przedmiotów (wyświetlanych jako obrazy), a po kliknięciu mogą wyświetlać produkty w ramach kategorii (będą wyświetlane obrazy)
Do wyświetlania kategorii przedmiotów użyłem interfejsu użytkownika: powtórz nad wsparciem dla fasoli Poniżej znajduje się mój kod xhtml
<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>
Oraz części kodu Managed Bean
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()));
}
Teraz mój problem, jeśli nie odkomentowałem 'imageList.add (baos)' w 'getData', obrazy nie są wyświetlane. Teraz naprawdę chcę wiedzieć, jak działa „ui: repeat”, ponieważ „imageList” zawiera obrazy i mogę zapisać to samo, jeśli jest to wymagane w jednej z metod. Jeśli określę stałą liczbę (np. „ImageList.get (0)”) w metodzie „getData”, ten sam obraz jest wyświetlany wielokrotnie. Gdzie tak, jakbym umieścił „imageNum” bez „imageList.add (baos)”, rzuca błąd „Błąd w dynamicznym zasobie strumieniowym”
Zmęczyłem sugestię Bjorna Pollexa i dokonałem niezbędnych zmian, ale teraz obrazy nie pojawiają się