Listagem de Imagens no DataGrid do primefaces

Olá pessoal, estou implementando uma VIEW em que desejo listar imagens armazendas no Banco de Dados em colunas do tipo LONGBLOB, eu consigo recuperar o atribtuto do tipo byte[], faço o objeto DefaultStreamedContent e armazeno em uma lista do mesmo tipo, porém ao tentar utilizar esta llista em um dataGrid ou DataTable a imagem não é renderizada.Já tentei retornar uma imagem através de um Iterator pelo própio Mangaed Bean e deu certo, o problema está na hora de usar em componentes que fazem iteração automática como os que mencionei ou em ui:repeat.Alguém sabe como posso fazer isso?
link:
http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=4163&p=18735&hilit=streamedcontent#p18769

Faz mais de um mês que estou tentando fazer isto, e não consigo , já abri post no prime faces e não tive suport.

Qual componente vc usar pra mostrar a imagem, p:grapicImage?

iiso mesmo estou usando o p:graphicImage setando como valor objetos do tipo DefaultStreamedContent.

tipo

<ui:repeat value=#{mb.fotos} var="item'>
<p:graphicImage value=#{item} />
</ui:repeat>

onde mb.fotos é uma coleção de objetos do tipo requerido pelo primefaces DefaultStreamedContent.

Já faz um bom tempo que estou tentando fazer aparecer está imagem e nada cara, postei la no forum do prime, mais ninguem deu suport

Se vc conseguir me avisa fazendo favor

Encontrei a solução em um fórum do Primefaces

você dve fazer o seguinte:
Crie uma classe auxiliar Image
Esta classe será usada para sequenciar os objetos StreamedContent dentro de uma lista que será usada em seu ManagedBean.

public class Image {

    private Integer id;
    private StreamedContent image;

    public Image(Integer id, StreamedContent image) {
        this.id = id;
        this.image = image;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public StreamedContent getImage() {
        return image;
    }

    public void setImage(StreamedContent image) {
        this.image = image;
    }
}

Agora construa seu ManagedBean com base neste.


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mb;

/**
 *
 * @author gti
 */
import beans.PlayerScreenInfo;
import dao.PlayerScreenInfoDAO;
import util.Image;
import java.io.ByteArrayInputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

@ManagedBean(name = "SBean")
@SessionScoped
public class SBean implements Serializable {

    private HashMap&lt;Integer, Image&gt; images = new HashMap&lt;Integer, Image&gt;();
    private ImagensDAO dao = new ImagensDAO();

    public SBean() {
        Iterator&lt;PlayerScreenInfo&gt; it = dao.listAll().iterator();
        int id = 1;
        while (it.hasNext()) {
            Imagem info = it.next();
            byte[] data = info.getByte();
            images.put(id, new Image(id, new DefaultStreamedContent(new ByteArrayInputStream(data))));
            id++;
        }

    }

    public List&lt;Image&gt; getImageList() {
        return new ArrayList&lt;Image&gt;(images.values());
    }

    public StreamedContent getImage() {
        String image_id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(&quot;image_id&quot;);
        System.out.println(&quot;image_id: &quot; + image_id);

        if (image_id == null) {
            return images.get(1).getImage(); //if you return null here then it won't work!!! You have to return something.
        }
        return images.get(Integer.parseInt(image_id)).getImage();
    }
}

Por fim, crie uma view no seguinte estilo

&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"&gt;
    &lt;h:head&gt;
        &lt;title&gt;Index&lt;/title&gt;
    &lt;/h:head&gt;
    &lt;h:body&gt;
        &lt;h:form&gt;
            &lt;ui:repeat value="#{SBean.imageList}" var="image"&gt;
                &lt;p:panel header="#{image.id}"&gt;
                    &lt;p:graphicImage value="#{SBean.image}" height="100" width="100"&gt;
                        &lt;f:param name="image_id" value="#{image.id}"/&gt;
                    &lt;/p:graphicImage&gt;
                &lt;/p:panel&gt;
            &lt;/ui:repeat&gt;
        &lt;/h:form&gt;
    &lt;/h:body&gt;
&lt;/html&gt;

É isso aí, qualquer dúvida veja o fórum do primefaces com a solução:
http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=4163&p=18735&hilit=streamedcontent#p18769

é tambem encontrei está solução

porem só funciona com sessionScoped

gostaria de fazer funcionar com viewScoped

mais valew

Este meu chegou a funcionar com RequestScoped, tente o VIewScoped, pode ser que funcione.

então é com viewScoped mesmo que eu queria rsrs não funciona, o meu funcionou apenas com applicationScoped e sessionScoped

Chegou em alguma solução? Estou com o mesmo problema, e ja verifico em alguns foruns que você vem procurando essa solução a um tempo, hehe!