我有一个Bean,其中包含一组对象,包括代表数据库中图像的StreamedContent对象(Primefaces类型)。 现在我想在JSF 2.0页面(使用Primefaces)上迭代此列表并显示图像。 以这种方式仅显示一个图像是可行的:
<p:graphicImage value="#{ImageLoader.oneImage}" title="aImage" alt="no Img"/>
但如果我把这个标签嵌套在 c:foreach、ui:repeat 或 p:datatable 中,图片就不会加载!代替文本将被显示。
<ui:repeat value="#{ImageLoader.allImages}" var="img">
<p:graphicImage value="#{img}" alt="Hier sollte ein Bild sein" />
<br/>
</ui:repeat>
图像加载器组件:
@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;
}
}
我看不到问题,你能帮我一下吗? :)
谢谢和问候。