使用ui:repeat显示p:graphicImage列表

时间:2013-03-25 10:20:48

标签: jsf primefaces

页:

<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;
}

以上代码有效。

0 个答案:

没有答案