Upload usando JSF

Mas uma dúvida, agora com upload de imagens, segue codigos abaixo

[code]package managedbeans;

/**
*

  • @author daniel
    */
    import java.io.File;
    import java.io.FileOutputStream;
    import javax.faces.context.ExternalContext;
    import javax.faces.context.FacesContext;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletResponse;
    import org.primefaces.event.FileUploadEvent;

public class UploadArquivo {

private String diretorio;
private String caminho;
private byte[] arquivo;
private String nome;

public UploadArquivo() {
}

public String getNome() {
    return nome;
}

public String getRealPath() {
    ExternalContext externalContext =
            FacesContext.getCurrentInstance().getExternalContext();
    HttpServletResponse response =
            (HttpServletResponse) externalContext.getResponse();
    FacesContext aFacesContext = FacesContext.getCurrentInstance();
    ServletContext context =
            (ServletContext) aFacesContext.getExternalContext().getContext();
    return context.getRealPath("/");
}

public void fileUpload(FileUploadEvent event, String type, String diretorio) {
    try {
        this.nome = new java.util.Date().getTime() + type;
        this.caminho = getRealPath() + diretorio + getNome();
        this.arquivo = event.getFile().getContents();
        File file = new File(getRealPath() + diretorio);
        file.mkdirs();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public void gravar() {
    try {
        FileOutputStream fos;
        fos = new FileOutputStream(this.caminho);
        fos.write(this.arquivo);
        fos.close();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

}[/code]

[code]package managedbeans;

import entities.Produto;
import java.io.IOException;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
import org.primefaces.event.FileUploadEvent;
import repository.ProdutoRepository;

/**
*

  • @author daniel
    */
    @ManagedBean(name = “mbProduto”)
    @SessionScoped
    public class ProdutoBean implements java.io.Serializable {

    private Produto produto = new Produto();
    private List produtos;
    private UploadArquivo arquivo = new UploadArquivo();

    public void uploadAction(FileUploadEvent event) {
    this.arquivo.fileUpload(event, “.JPG”, “/foto/”);
    this.produto.setFoto(this.arquivo.getNome());
    }

    public void save() throws IOException {
    ProdutoRepository produtoRepository = new ProdutoRepository(this.getManager());
    produtoRepository.save(this.produto);
    this.arquivo.gravar();

     this.produto = new Produto();
     //this.produtos = null;
     this.arquivo = new UploadArquivo();
     FacesContext.getCurrentInstance().getExternalContext().redirect("produto.xhtml");
    

    }

    public String preparaAlterar(Produto produto) throws IOException {
    this.setProduto(produto);
    FacesContext.getCurrentInstance().getExternalContext().redirect(“alterar.xhtml”);
    return “alterar.xhtml?faces-redirect=true”;
    }

    public void update() throws IOException {
    ProdutoRepository produtoRepository = new ProdutoRepository(this.getManager());
    produtoRepository.update(this.produto);

     this.produto = new Produto();
     this.produtos = null;
     FacesContext.getCurrentInstance().getExternalContext().redirect("listagem.xhtml");
    

    }

    public void remove(Produto produto) {
    ProdutoRepository repository = new ProdutoRepository(this.getManager());
    repository.remove(produto);

     this.produtos = null;
    

    }

    public List getTpListas() {
    if (this.produtos == null) {
    ProdutoRepository repository = new ProdutoRepository(this.getManager());
    this.produtos = repository.getProduto();
    }

     return this.produtos;
    

    }

    public Produto getProduto() {
    return produto;
    }

    public void setProduto(Produto produto) {
    this.produto = produto;
    }

    private EntityManager getManager() {
    FacesContext fc = FacesContext.getCurrentInstance();
    ExternalContext ec = fc.getExternalContext();
    HttpServletRequest request = (HttpServletRequest) ec.getRequest();
    return (EntityManager) request.getAttribute(“entityManager”);
    }
    }[/code]

[code]

<f:view>
    <h:head>
        <title>Tipo de Lista</title>

        <style type="text/css">
            .ui-widget {font-size: 75% !important;}
        </style>
    </h:head>

    <h:body>
        <h:form id="frmGeral" enctype="multipart/form-data">
            <p:fieldset legend="Cadastro de Produto" toggleable="true">
                <p:messages id="messages" />

                <h:panelGrid columns="2" style="font-family: Verdana, Arial; font-weight: bold;">
                    <h:outputLabel id="lbNome" value="*Nome" for="nome" style="float: right;"/>
                    <p:inputText id="nome" size="60" value="#{mbProduto.produto.nome}" required="true"
                                 requiredMessage="Campo [Nome] é obrigatório." />

                    <h:outputLabel id="lbUndMed" value="*Unidade de Medida" for="undmed" style="float: right;"/>
                    <p:inputText id="undmed" size="60" value="#{mbProduto.produto.undmed}" required="true"
                                 requiredMessage="Campo [Unidade de Medida] é obrigatório." />

                    <h:outputLabel id="lbFoto" value="Foto" for="foto" style="float: right;"/>
                    <p:fileUpload label="Procurar" id="foto" fileUploadListener="#{mbProduto.uploadAction}" auto="true"/>

                    <p:commandButton value="Adicionar" action="#{mbProduto.save()}"
                                     update="frmGeral, messages" />

                </h:panelGrid>
            </p:fieldset>
        </h:form>
    </h:body>
</f:view>
[/code]

O problema, quando eu clico no botão pra adicionar as fotos, mesmo que coloque um breakpoint no public void uploadAction(FileUploadEvent event) { ele não faz nada, não para no break e nem faz o upload.

Sempre noto que a imagem aparece em um “flash” de segundos fazendo o upload e some.

Tinha esquecido o web.xml está assim:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> <url-pattern>*.jsf</url-pattern> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <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> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>

Qual versão do Primefaces vocês está usando? Parece que tem um problema com a 3.0M1: file upload listener not call in primefaces 3.0M1

Em todo caso, um problema similar já foi postado aqui, você viu? FileUpload do PrimeFaces não chama fileUploadListener

Consegui resolver, mas infelizmente não utilizando o:

acho que está com algum bug na versão mesmo, como vou enviar apenas uma imagem por cadastro acabei usando:

Você adicionou os jars para o fileupload funcionar? O commons-fileupload e commons-io ?

[]'s

Sim, fiz tudo certo, desse jeito ai não funcionou nem com reza braba, não chama o metodo.