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