<p:graphicImage value="#{foto.imagem}"/> não mostra a imagem

Pessoa o componente <p:graphicImage value="#{foto.imagem}"/> não mostra a imagem alguem sabe o que pode ser

meu código

.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Cadastro de Album</title>
    </h:head>
    <f:view>
        <h:body>
            <h:form id="frmGridAlbum">
                <p:growl id="menssagensAlbum"
                         life="3000"/>
                <p:dataTable widgetVar="dtAlbuns"
                             var="album"
                             value="#{albumMB.albuns}"
                             paginator="true"
                             rows="5"
                             selection="#{albumMB.album}"
                             selectionMode="single"
                             onRowSelectComplete="dlgAlbum.show();"
                             emptyMessage="Nao existe Album cadastrado"
                             style="width:60%"
                             update="somCliente, itxDescricao, clkGravar, clkAlterar">
                    <p:column sortBy="#{album.id}"
                              filterBy="#{album.id}">
                        <f:facet name="header">
                            <h:outputText value="Id" />
                        </f:facet>
                        <h:outputText value="#{album.id}" />
                    </p:column>
                    <p:column sortBy="#{album.cliente.nome}"
                              filterBy="#{album.cliente.nome}">
                        <f:facet name="header">
                            <h:outputText value="Cliente" />
                        </f:facet>
                        <h:outputText value="#{album.cliente.nome}" />
                    </p:column>
                </p:dataTable>
                <p:panel style="width:59.2%">
                    <p:commandLink id="clkIncluir"
                                   title="Incluir"
                                   oncomplete="dlgAlbum.show()"
                                   action="#{albumMB.incluir}"
                                   update="somCliente, itxDescricao, clkGravar, clkAlterar">
                        <h:graphicImage url="/imagens/novo.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <p:commandLink title="Apagar"
                                   actionListener="#{albumMB.apagar}"
                                   style="margin-left:20px"
                                   update="frmGridAlbum"
                                   oncomplete="dlgAlbum.hide();">
                        <h:graphicImage url="/imagens/apagar.jpg"
                                        style="border:0"/>
                    </p:commandLink>
                    <h:commandLink title="Voltar"
                                   action="#{albumMB.voltar}"
                                   style="margin-left:20px">
                        <h:graphicImage url="/imagens/voltar.jpg"
                                        style="border:0"/>

                    </h:commandLink>
                </p:panel>
            </h:form>
            <h:form id="frmCadastroAlbum">
                <p:dialog id="dlgAlbum"
                          widgetVar="dlgAlbum"
                          header="Album"
                          width="700">
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Cliente:"
                                       for="somCliente" />
                        <h:selectOneMenu id="somCliente"
                                         value="#{albumMB.album.cliente.nome}"
                                         required="true"
                                         requiredMessage="Informe a descricao">
                            <f:selectItems value="#{albumMB.clientes}"
                                           var="cliente"
                                           itemValue="#{cliente.id}"
                                           itemLabel="#{cliente.nome} CPF : #{cliente.cpf}"/>
                        </h:selectOneMenu>
                        <h:outputLabel value="Descricao:"
                                       for="itaDescricao"/>
                        <p:inputTextarea id="itaDescricao"
                                         value="#{albumMB.album.descricao}"
                                         required="true"
                                         requiredMessage="Informe a descricao"/>
                    </h:panelGrid>
                    <p:dataGrid id="dgdFotos"
                                var="foto"
                                value="#{albumMB.fotos}"
                                columns="2"
                                rows="1"
                                paginator="true"
                                style="width:30%">
                        <p:column>
                            <p:panel header="#{foto.nome}"
                                     style="text-align:center">
                                <h:panelGrid columns="1"
                                             style="width:100%">
                                    <p:graphicImage value="#{foto.imagem}"/>
                                </h:panelGrid>
                            </p:panel>
                        </p:column>

                    </p:dataGrid>
                    <h:panelGrid columns="3" >
                        <p:fileUpload id="fudSelecionarFotos"
                                      fileUploadListener="#{albumMB.selecionarFoto}"
                                      multiple="true"
                                      allowTypes="*.jpg;*.png;*.gif;"
                                      description="Images"
                                      update="dgdFotos"
                                      style="margin-right:20px"/>
                        <p:commandLink  id="clkGravar"
                                        title="Gravar"
                                        action="#{albumMB.gravar}"
                                        disabled="#{!empty albumMB.album.id}"
                                        style="margin-right:20px"
                                        update="somCliente, itxDescricao, frmGridAlbum">
                            <h:graphicImage url="/imagens/gravar.jpg"
                                            style="border:0"/>
                        </p:commandLink>
                        <p:commandLink id="clkAlterar"
                                       title="Alterar"
                                       action="#{albumMB.album}"
                                       disabled="#{empty albumMB.album.id}"
                                       update="somCliente, itxDescricao, frmGridAlbum"
                                       style="margin-left:20px">

                            <h:graphicImage url="/imagens/alterar.bmp"
                                            style="border:0"/>

                        </p:commandLink>
                    </h:panelGrid>

                </p:dialog>
            </h:form>
        </h:body>
    </f:view>
</html>

MB

 public void selecionarFoto(FileUploadEvent event) {
        System.out.println("okkk");
        UploadedFile uf = event.getFile();
        String nomeArquivo = uf.getFileName();
        InputStream is = null;
        Foto foto = new Foto();
        try {
            is = uf.getInputstream();
            byte[] b = new byte[is.available()];
            foto.setNome(nomeArquivo);
            foto.setFoto(b);
            //InputStream stream = new ByteArrayInputStream(b);
            //foto.setImagem(new DefaultStreamedContent(stream));

           foto.setImagem(new DefaultStreamedContent(event.getFile().getInputstream()));
            fotos.add(foto);
            System.out.println("okkk nome"+ foto.getImagem());
            JSFUtil.enviarMenssagemSucesso("Upload realizado com sucesso.");
        } catch (Exception e) {
            e.printStackTrace();
            JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                ex.printStackTrace();
                JSFUtil.enviarMenssagemErro("Erro ao realizar o Upload.");
            }
        }
    }

Deste já agradeço.

O graphicImage não aceita imagem do tipo Byte[], vc tem que transformar ela em StreamedContent.
Não lembro agora como faz isso, mas em casa tenho um exemplo, qdo chegar posto aqui.

Mais se vc verificar eu estou usando o StreamedContent o

foto.setImagem(new DefaultStreamedContent(event.getFile().getInputstream()));
é um StreamedContent

o atributo imagem da classe Foto é um StreamedContent

Não tinha visto, mas eu faço diferente, da uma olhada e ve se resolve.

Produto produto = produtoDAO.foto(); BufferedImage img = ImageIO.read(new ByteArrayInputStream(produto.getFoto())); File file = new File("nome"); boolean write = ImageIO.write(img, "png", file); FileInputStream fi = new FileInputStream(file); StreamedContent imagem = new DefaultStreamedContent(fi);

Ainda não funciona, a imagem não aparece…

Ja tentei de tudo…

Alguem?

Eu sei que a imagem esta sendo gerado pois mandei salvar em um pasta para testar, porem não esta sendo exibida pelo prime…

Ajudai ai pessoal

Pelo que entendi do seu código, você quer dar um upload e mostrar a foto com <p:graphicImage> no mesmo instante.

Verifica se seu Managed Bean está como SessionScoped, eu só consegui dessa forma fazer dar um upload e mostrar a imagem.Com ViewScoped ele vai dar upload, mas por alguma coisa que, eu não consigo explicar, ele não carrega a imagem, mas faz upload normal.

Estou com um problema parecido com esse, mas minha imagem já encontra-se no banco de dados POSTGRES em formato byteA preciso apenas recupera-lá. Vou tentar essa conversão para StreamedContent que, por hora, parece a única solução para recuperar em um DataGrid do primefaces usando o graphicImage.

Se achou uma solução para seu problema poste aqui para os demais. :smiley: :lol:

Abraços.

Estava com um problema parecido, tenho uma lista de imagens com um botão próximo, a primeira imagem não era mostrada mas se desse um próximo carregava certinho. Foi ai que pesquisando na net descobri que o componente tem uma requisição em tempo diferente da página(± isso). Essa a solução que eu arrumei.
Não é das melhores mas funcionou.

No método onde a imagem é carregada:

public Perola getPerola() { try { if (perola == null) { if (perolas.isEmpty()) { perolas = facade.getPerolas(); controle = perolas.size() - 1; } if (controle >= 0) { perola = perolas.get(controle); controle--; } imagemperola = new DefaultStreamedContent(new ByteArrayInputStream(perola.getImagem()), "image/jpg"); } return perola; } catch (Exception e) { return null; } }

Então no get da imagem eu chamo o método novamente:

[code]public StreamedContent getImagemperola() {
try{
getPerola();
imagemperola = new DefaultStreamedContent(new ByteArrayInputStream(perola.getImagem()), “image/jpg”);

    return imagemperola;
    }catch(Exception e){
        return imagemperola;
    }
}[/code]

Acho que é isso, espero ter ajudado !

Oi galera,

Gostaria de dicas de voces, caso possivel.
Estou armazenando imagens em meu banco, como array de Bytes.

Encontrei alguns metodos de desconversão já que gostaria de permitir a seleção da imagem por parte do usuario e exibi-la num painel na minha pagina xhtml.
A principio para testes gostaria de desconverter de arraydeBytes para jpg, ja que pretendo trabalhar com imagens do formato dicom(radiologicas).
Quem sabe até um dia consiga exibir no seu formato raiz dentro da pagina da web.

eu estou usando a seguinte tag
<t:inputFileUpload value="#{imagemBean.uploadedFile}"

para permitir a seleção da imagem, mas após isso nao estou conseguindo alternativas pra exibir a imagem selecionada na tela,
Sou nova nesta área de desenvolvimento com jsf.

Dicas?

[quote=AndressaF]Oi galera,

Gostaria de dicas de voces, caso possivel.
Estou armazenando imagens em meu banco, como array de Bytes.

Encontrei alguns metodos de desconversão já que gostaria de permitir a seleção da imagem por parte do usuario e exibi-la num painel na minha pagina xhtml.
A principio para testes gostaria de desconverter de arraydeBytes para jpg, ja que pretendo trabalhar com imagens do formato dicom(radiologicas).
Quem sabe até um dia consiga exibir no seu formato raiz dentro da pagina da web.

eu estou usando a seguinte tag
<t:inputFileUpload value="#{imagemBean.uploadedFile}"

para permitir a seleção da imagem, mas após isso nao estou conseguindo alternativas pra exibir a imagem selecionada na tela,
Sou nova nesta área de desenvolvimento com jsf.

Dicas?[/quote]

da uma olhada neste post
http://www.guj.com.br/java/54493-transformar-array-de-bytes-em-imagem