Exibir imagem em p:graphicimage

Pessoal, já pesquisei e tentei de td quanto eh forma exibir em um p:graphicimage uma imagem vinda de um arquivo que ta em um contexto externo da aplicacao…

to fazendo assim:

		[code]String arquivo = scontext.getRealPath("/WEB-INF/upload/imagem.png");//caminho real da imagem
		File file = new File(arquivo);//cria o arquivo
		InputStream f = new FileInputStream(file);
		StreamedContent img = new DefaultStreamedContent(f);//classe em que o graphicimage le uma imagem
		usuario.setImagem(img);//seta a imagem que é do tipo StreamedContent [/code]

Até ai eu acho q funciona,
mas qdo eu vou exibir no primefaces, nao exibe imagem nenhum !

<p:graphicImage width="210px" height="250px"  value="#{usuario.imagem}" />

Se alguem se tiver algum exemplo funcionando qquer de como gravar e exibir uma imagem (pode ser por banco de dados (blob) ow salvando em um arquivo q nem to tentando fazer) e puder me ensinar vou agradecer muito.

vlw!

tenta assim :

[code]
public void limparFoto(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
final InputStream io = context.getExternalContext().getResourceAsStream("//resources//images//profile.gif");
stcImagem = new DefaultStreamedContent(io, “image/png”, “Foto”);

imagem = null;  

} [/code]

Entao, juniorsatanas,

pegar a imagem ele pega.
Ele armazena o streamedcontent na variavel imagem, o problema é qdo eu vou exibir a imagem com o primefaces…

ele nao mostra nada…

assim q ta o xhtml…

[code]
<p:dataGrid var=“usuario” value="#{usuarioBean.listar}" >

	<p:graphicImage value="#{usuario.imagem}"/> // isso nao mostra nada!! pq ?

</p:dataGrid>[/code]

Estou com o mesmo problema.
Fiz uma pagina pra upload de imagem que salva as imagens usando o getExternalContext…
Até ai funcionou…
Agora fiz uma outra pagina que mostra as imagens upadas, pra isso uso o mesmo getExternalContext pra pegar a pasta dos arquivos… eu ate consigo criar um ArrayList com os arquivos de imagem, porem o primefaces nao mostra pois o caminho das imagens é o caminho delas em relação ao computador do servidor, por ex: c:\MeuSite\imagem1.jpg e não em relação ao site, por ex: http://meusite.com/img/imagem1.jpg
Teria como pegar o contexto da internet ao invés de pegar o contexto da maquina no servidor?

Cara consegui, vou te mandar como que ta o meu codigo.
Só tem 2 detalhes:
1-Toda vez que voce fizer o deploy do projeto ele vai limpar a pasta de upload, entao teria que fazer um backup antes de dar depoy, e por de volta depois. Mais pra frente vou fazer um esquema que nao coloque dentro da pasta do site as imagens, ai ele nao exclui os uploads a cada deploy.
2-Se voce tiver usando o netbeans pra testar, não use. aqui eu estava usando e dava problema pois ele configurava a pasta do site na pasta dos projetos do netbeans. o que eu fiz foi ao inves de testar pelo netbeans, foi compilar o .war do site, jogar o .war na pasta webapps do tomcat, e fazer o deploy manualmente pelo tomcat manager.
Segue os codigos como prometido:

método do managedBean pra recuperar as fotos do upload:

public List<String> getImagens(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
        
//        File pastaImagensTopo = new File(scontext.getRealPath("/WEB-INF/imagensTopo/"));
        File pastaImagensTopo = new File(scontext.getRealPath("/uploads/imagensTopo/"));
        if(!pastaImagensTopo.exists())pastaImagensTopo.mkdirs();
        File[] arquivos = pastaImagensTopo.listFiles();
        ArrayList imagens=new ArrayList();
        for(File arquivo : arquivos){
            if(arquivo.isFile()){
                String ext=arquivo.getName().substring(arquivo.getName().lastIndexOf(".")).toLowerCase();
                if(ext.equals(".jpg")||ext.equals(".jpeg")||ext.equals(".bmp")||ext.equals(".gif")||ext.equals(".png")){
                    imagens.add("/uploads/imagensTopo/"+arquivo.getName());
                }
            }
        }
        return imagens ;
    }

método do managedBean pra fazer o upload:

public void upload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage(event.getFile().getFileName() + " foi enviado com sucesso.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        // Do what you want with the file        
        try {
            byte[] foto = event.getFile().getContents();
            String nomeArquivo = event.getFile().getFileName();  
            FacesContext facesContext = FacesContext.getCurrentInstance();  
            ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();  
            String arquivo = scontext.getRealPath("/uploads/imagensTopo/" + nomeArquivo);
            
//            String arquivo = scontext.getContextPath()+"/uploadis/" + nomeArquivo;
            File f=new File(arquivo);
            if(!f.getParentFile().exists())f.getParentFile().mkdirs();
            if(!f.exists())f.createNewFile();
            System.out.println(f.getAbsolutePath());
            FileOutputStream fos=new FileOutputStream(arquivo);
            fos.write(foto);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Pagina de upload:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data">  
  
            <p:fileUpload fileUploadListener="#{fileUploadController.upload}"  
                    mode="advanced"   
                    update="messages"  
                    sizeLimit="5000000"   
                    allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/"/>  

            <p:growl id="messages" showDetail="true"/>

        </h:form>  
    </h:body>
</html>

Pagina que mostra a galleria das imagens upadas(tem uma tabela em cima que mostra os caminhos das imagens mas ignora aquilo, tinha feito so pra teste mesmo):


<?xml version='1.0' encoding='UTF-8' ?>
<!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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:composition template="/templates/template.xhtml">

        <ui:define name="titulo">Eventos - ACCI</ui:define>

        <ui:define name="conteudo">

            <p:growl id="aviso" autoUpdate="true" />
            
            Caminho das imagem hahaha:<br/>
            #{imagensTopo.caminho}
            
            <f:view>
                <h:form>
                    <p:dataTable value="#{imagensTopo.imagens}" var="item">
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Código" />
                            </f:facet>
                            <h:outputText value="#{item}" />
                        </p:column>
                    </p:dataTable>
                </h:form>
            </f:view>
            
            <p:galleria value="#{imagensTopo.imagens}" var="imagem" >
                <p:graphicImage value="#{imagem}"/>
            </p:galleria>


        </ui:define>

    </ui:composition>
</html>

Eh isso ai, comenta ai se deu certo ou se nao deu algum problema… talvez eu consiga te ajudar.

mateusviccari,

Esse seu exemplo o p:galleria abre normal as imagens no IE?

pois no meu não exibe a imagem no IE somente no Mozila e Chrome. Sabe porque?

cara que estranho, aqui por incrivel que pareça o internet explorer funcionou normal…
mas é o internet explorer 9…
voce testou em qual versão?

Consegui resolver meu problema, melhor os desenvolvedores do PrimeFaces que resolveram hehehehe

eu estava usando a versão primefaces-3.3 mudei para primefaces-3.4 e funcionou blz.

Vlw

Portfólio: www.webxml.com.br

¬¬

Cara… Desisto Serio mesmo… não dá pra desenvolver web usando PRIMEFACES querendo que o usuário utilize IE…

PrimeFaces 4.0 e Image <p:graphicImage> não funciona…

Se alguém um dia conseguir…

[]'s