页:
<ui:repeat value="#{testController.photos}" var="item">
<p:graphicImage value="#{item}"/>
</ui:repeat>
豆:
private TestEntity current;
public List getPhotos() {
StreamedContent image;
Collection rawPhotoCollection = current.getPhotoCollection();
List<StreamedContent> imageList = new ArrayList<StreamedContent>(rawPhotoCollection);
List<Photo> photoList = new ArrayList<Photo>(rawPhotoCollection);
for (int i = 0; i < photoList.size(); i++) {
byte[] data = photoList.get(i).getImage();
ByteArrayInputStream is = new ByteArrayInputStream(data);
image = new DefaultStreamedContent(is, "image/png");
imageList.set(i, image);
}
return imageList;
}
TestEntity有一个Photo Entity集合。 我将照片集合转换为照片的数组列表。 Photo有一列声明为BLOB的图像。 创建一个循环来检索每个图像,以便我可以将其转换为StreamedContent。 将每个StreamedContent插入到imageList(StreamedContent列表) 返回imageList并将其显示为p:graphicImage。
问题是,页面给了我一个破碎图像的图标。它不显示图像。我很确定它有一个图像因为我不会使用ui:重复并只使用p:graphicImage显示所选的Photo Entity,它会显示正确的图像。类似的东西:
页:
<p:graphicImage value="#{testController.firstImage}"/>
bean:
public StreamedContent getFirstImage() {
Collection rawPhotoCollection = current.getPhotoCollection();
List<Photo> photoList = new ArrayList<Photo>(rawPhotoCollection);
byte[] data = photoList.get(0).getImage();
ByteArrayInputStream is = new ByteArrayInputStream(data);
StreamedContent image = new DefaultStreamedContent(is, "image/png");
return image;
}
以上代码有效。