Bom dia galera, tudo certo?? Bem, fiz um projeto de teste para fazer upload de uma imagem e colocá-la em um graphicImage . Abaixo o projeto:
Meu Bean:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;
/**
*
* @author prog16
*/
@ManagedBean(name = "bean")
@SessionScoped
public class bean {
private StreamedContent logoEscola;
private UploadedFile imagem;
public void handleFileUpload(FileUploadEvent event) throws IOException {
imagem = event.getFile();
FacesMessage msg = new FacesMessage("Sucesso", event.getFile().getFileName() + " foi adicionada.");
FacesContext.getCurrentInstance().addMessage(null, msg);
ByteArrayInputStream ais;
InputStream is = imagem.getInputstream();
byte[] bytes = IOUtils.toByteArray(is);
ais = new ByteArrayInputStream(bytes);
logoEscola = new DefaultStreamedContent(ais, "image");
}
public void excluiImagem() {
setLogoEscola(null);
setImagem(null);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Imagem foi removida com sucesso."));
}
public StreamedContent getLogoEscola() {
return logoEscola;
}
public void setLogoEscola(StreamedContent logoEscola) {
this.logoEscola = logoEscola;
}
public UploadedFile getImagem() {
return imagem;
}
public void setImagem(UploadedFile imagem) {
this.imagem = imagem;
}
}
Meu xhtml:
<?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:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form id="form1">
<p:growl id="messages" showDetail="true"/>
<p:fileUpload fileUploadListener="#{bean.handleFileUpload}" mode="advanced"
update=":form1:messages :form1:imagemCarregada" auto="true"
sizeLimit="1228800" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
invalidFileMessage="Arquivo não permitido"
invalidSizeMessage="Tamanho do arquivo inválido"/>
<fieldset>
<legend>Anexos - Tamanho Máximo: 1228800 Bytes (1.200 KB)</legend>
<h:panelGrid columns="1" width="100%">
<h:panelGrid columns="2">
<p:graphicImage id="imagemCarregada" value="#{bean.logoEscola}" width="120" height="120" style="border-style: solid;
border-color: #9c9d9f; border-width: 1px" /><br/><br/>
<p:commandButton id="excImg" value="Excluir Imagem" update=":form1:messages :form1:imagemCarregada" action="#{bean .excluiImagem()}" icon="cancelar"/>
</h:panelGrid>
</h:panelGrid>
</fieldset>
</h:form>
</h:body>
</html>
E no meu web.xml:
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
No projeto de testes, está funcionado tudo, troca de imagem, exclusão e tal. Porém, no projeto que realmente trabalho, coloquei pra rodar o que fiz e não está funcionando corretamente, não está trocando a imagem do graphicImage e nem excluindo a imagem…Abaixo, o projeto em que trabalho:
O que fiz no bean:
@ManagedBean
@SessionScoped
public class EscolaJsfBean extends BaseCRUDJSFBean<Escola> {
.
.
private StreamedContent logoEscola;
private UploadedFile imagem;
//getters e setters
public void handleFileUpload(FileUploadEvent event) throws IOException {
excluiImagem();
imagem = event.getFile();
JsfUtil.info("Sucesso" + event.getFile().getFileName() + " foi adicionada.");
ByteArrayInputStream ais;
InputStream is = imagem.getInputstream();
byte[] bytes = IOUtils.toByteArray(is);
ais = new ByteArrayInputStream(bytes);
setLogoEscola(new DefaultStreamedContent(ais, "image"));
crudObj.setImagemEscola(bytes);
}
private void carregaImagem() throws IOException {
if (crudObj.getImagemEscola() != null) {
ByteArrayInputStream ais;
ais = new ByteArrayInputStream(crudObj.getImagemEscola());
logoEscola = new DefaultStreamedContent(ais, "image");
}
}
public void excluiImagem() {
setLogoEscola(null);
crudObj.setImagemEscola(null);
setImagem(null);
JsfUtil.info("A imagem removida com sucesso.");
}
@Override
public void editaObj(Escola obj) { // utilizo quando estou editando o obj, para trazer a imagem carregada já...
super.editaObj(obj);
if (obj.getImagemEscola() != null) {
try {
carregaImagem();
} catch (IOException ex) {
java.util.logging.Logger.getLogger(EscolaJsfBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Meu xhtml:
<h:form id="form1" enctype="multipart/form-data">
<p:tab title="Cadastro" id="tabForm">
<fieldset>
<legend>Anexos - Tamanho Máximo: 1228800 Bytes (1.200 KB)</legend>
<h:panelGrid columns="1" width="100%">
<h:panelGrid columns="2">
<p:fileUpload fileUploadListener="#{escolaJsfBean.handleFileUpload}" mode="advanced"
update=":form1:tab:growl2 :form1:tab:imagemCarregada" auto="true"
sizeLimit="1228800" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
invalidFileMessage="Arquivo não permitido"
invalidSizeMessage="Tamanho do arquivo inválido"/>
<p:graphicImage id="imagemCarregada" value="#{escolaJsfBean.logoEscola}" width="120" height="120" style="border-style: solid;
border-color: #9c9d9f; border-width: 1px" /><br/><br/>
<p:commandButton id="excImg" value="Excluir Imagem" update=":form1:tab:growl2 :form1:tab:imagemCarregada" action="#{bean .excluiImagem()}" icon="cancelar"/>
</h:panelGrid>
</h:panelGrid>
</fieldset>
</tab>
</form>
No web.xml está a mesma coisa que está no projeto de testes. Se alguém puder ajudar a encontrar o que está acontecendo, ficaria mto grato…Vlw