【问题标题】:Use of p:graphicImage in ui:repeat or p:dataTable在 ui:repeat 或 p:dataTable 中使用 p:graphicImage
【发布时间】:2011-11-07 20:58:12
【问题描述】:

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

图像加载器 Bean:

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

}

我没有看到问题,请您帮帮我吗? :)

感谢和问候

【问题讨论】:

    标签: jsf-2 primefaces iteration


    【解决方案1】:

    我在这个问题上折腾了一天左右,但我找到了解决办法!

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

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2012-01-08
      • 2012-06-12
      • 2015-05-15
      • 2012-04-21
      • 2013-09-15
      • 2015-12-13
      • 1970-01-01
      • 2013-05-22
      相关资源
      最近更新 更多