在ui:repeat或p:dataTable中使用p:graphicImage

4

我有一个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;
}

}

我看不到问题,你能帮我一下吗? :)
谢谢和问候。
1个回答

8

我花了一天时间来思考这个问题,但是我找到了解决方案!

JSF:

<ui:repeat value="#{bean.images}" var="imageID">
             <p:graphicImage value="#{bean.image}">
                 <f:param name="imageID" value="#{imageID}" />
             </p:graphicImage>
 </ui:repeat>

托管 Bean:

public List<String> getImages(){
        List<String> l = new ArrayList<String>();
        for(Theme t:themeFacade.findAll())
            l.add(t.getId().toString());
        return l;
    }

    public StreamedContent getImage(){
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest();
        String imageID = (String) myRequest.getParameter("imageID");
        return new DefaultStreamedContent(new ByteArrayInputStream(themeFacade.find(Long.parseLong(imageID)).getImage()));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接