Upload com primefaces ajuda

pessoal vocês são minha ultima esperança segui esses tuto:
http://today.java.net/pub/a/today/2006/02/09/file-uploads-with-ajax-and-jsf.html
http://www.patternizando.com.br/2011/04/upload-com-primefaces/
http://quebrandoparadigmas.com/?p=168

a simplesmente não sei se funciona tipo assim ele "faz o upload " mas ele não guarda nem na pasta temporária
mas
por favor me ajudem como faço upload com JSF e salvar o caminho na base de dados ou pelo menos numa pasta reservada no projeto mesmo

tipo assim no exemplo tem uma classe assim:

package controllers;  
  
import java.io.IOException;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.SessionScoped;  
import org.primefaces.event.FileUploadEvent;  
import org.primefaces.model.DefaultStreamedContent;  
import org.primefaces.model.StreamedContent;  
  
/** 
 *criado em 06/07/2010 
 * @author wagnerborges 
 */  
@ManagedBean  
@SessioScoped  
public class FileUploadController {  
  
 private String nomeArquivoSelecionado;  
 private StreamedContent imagem;  
  
 public StreamedContent getImagem() {  
 return imagem;  
 }  
  
 public void setImagem(StreamedContent imagem) {  
 this.imagem = imagem;  
 }  
  
 public String getNomeArquivoSelecionado() {  
 return nomeArquivoSelecionado;  
 }  
  
 public void setNomeArquivoSelecionado(String nomeArquivoSelecionado) {  
 this.nomeArquivoSelecionado = nomeArquivoSelecionado;  
 }  
  
 public void fileUploadAction(FileUploadEvent event) {  
 try {  
 setNomeArquivoSelecionado(event.getFile().getFileName());  
 imagem = new DefaultStreamedContent(event.getFile().getInputstream());  
 } catch (IOException ex) {  
 Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex);  
 }  
 }  
} 

e a página JSF:

<?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.prime.com.tr/ui">  
  
<h:head>  
  
<title>Upload de Arquivos com primefaces</title>  
  
</h:head>  
  
<h:body>  
  
<h:form>  
  
<p:fileUpload auto="false" label="Selecionar..." allowTypes="*.jpg;*.png;*.gif;" multiple="false" description="Imagem" update="idarquivo,idimagem" fileUploadListener="#{fileUploadController.fileUploadAction}" /> <br/>  
  
Arquivo selecionado: <h:outputText id="idarquivo" value="#{fileUploadController.nomeArquivoSelecionado}"/>  
  
<br/><br/>  
  
<p:graphicImage id="idimagem" value="#{fileUploadController.imagem}" />  
  
</h:form>  
  
</h:body>  
  
</html> 

segundo o cara ele só mostra isso acontece mas
eu quero salvar ela numa pasta junto do projeto e salvar esse caminho no banco
dai eu achei esse fragmento:

public void processFileUpload(FileUploadEvent event) throws IOException {

        try {
            //Cria um arquivo UploadFile, para receber o arquivo do evento
            UploadedFile arq = event.getFile();
            InputStream in = new BufferedInputStream(arq.getInputstream());
            //copiar para pasta do projeto
            File file = new File("D://doc//" + arq.getFileName());
            //O método file.getAbsolutePath() fornece o caminho do arquivo criado
            //Pode ser usado para ligar algum objeto do banco ao arquivo enviado
            caminho = file.getAbsolutePath();
            FileOutputStream fout = new FileOutputStream(file);
            while (in.available() != 0) {
                fout.write(in.read());
            }

            fout.close();
            FacesMessage msg = new FacesMessage("O Arquivo ", file.getName() + " salvo.");
            FacesContext.getCurrentInstance().addMessage("msgUpdate", msg);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

mas não faço a minima ideia onde e como coloca-lo
alguém pode me ajudar
por favor valeu

Vc adicionou as bibliotecas necessárias?

sim as commons-fileupload1.1 e commons-io.jar
mas onde eu coloco a ultimo trecho de código?
ajustei o 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>  

bem como no exemplo

Amigo coloque esse código que vc encontrou, no seu método fileUploadAction. O resto parece que ta tudo ok.

Revivendo o tópico …

Estou com um problema parecido . O método descrito no fileUploadListener não é chamado .

INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.

AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent.  Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.

INFO: Skipping call to libraryExists().  Please set context-param com.sun.faces.enableMissingResourceLibraryDetection to true to verify if library http://java.sun.com/jsf/composite/exporter actually exists

Alguém me dá uma força ?

tenho um aqui uso assim

web.xml

<filter>
		<filter-name>PrimeFaces FileUpload Filter</filter-name>
		<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
		<init-param>
			<param-name>thresholdSize</param-name>
			<param-value>51200</param-value>
		</init-param>
		<init-param>
			<param-name>uploadDirectory</param-name>
			<param-value>C:\arquivos</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>PrimeFaces FileUpload Filter</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
	</filter-mapping>







bean

package br.com.projeto.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import br.com.projeto.beans.Arquivos;
import br.com.projeto.dao.HibernateDao;

@SessionScoped
@ManagedBean
public class ArquivosBean implements Serializable {
	private static final long serialVersionUID = 1L;
	private Arquivos arquivo = new Arquivos();
	private List<Arquivos> arquivos = new ArrayList<Arquivos>();
	@SuppressWarnings("unused")
	private StreamedContent file;

	public String fileUploadAction(FileUploadEvent event) throws IOException {
		try {
			arquivo.setNome(event.getFile().getFileName());
			byte[] conteudo = event.getFile().getContents();
			String caminho = "C:\\arquivos\\" + event.getFile().getFileName();
			FileOutputStream fos = new FileOutputStream(caminho);
			fos.write(conteudo);
			fos.close();
			HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
			arquivo.setCaminho(caminho);
			arquivo.setTamanho(conteudo.length);
			String nomeArquivo = arquivo.getNome();
			int e = nomeArquivo.lastIndexOf(".");
			arquivo.setTipo(nomeArquivo.substring(e));
			hibernateDao.salvar(arquivo);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Arquivo Salvo!", arquivo.getNome()));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
		} finally {
			arquivo = new Arquivos();
			arquivos = new ArrayList<Arquivos>();
			file = null;
		}
		return "Arquivos.xhtml";
	}

	public List<Arquivos> getListArquivos() {
		HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
		arquivos = hibernateDao.getBeans();
		return arquivos;
	}

	public void remove() {
		try {
			HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
			Integer id = arquivo.getId();
			arquivo = hibernateDao.getBean(id);
			new File(arquivo.getCaminho()).delete();
			hibernateDao.deletar(arquivo);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Arquivo Deletado!", arquivo.getNome()));
		} catch (Exception e) {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
		} finally {
			arquivo = new Arquivos();
			arquivos = new ArrayList<Arquivos>();
			file = null;
		}
	}

	public StreamedContent getFile() throws FileNotFoundException {
		HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
		Integer id = arquivo.getId();
		arquivo = hibernateDao.getBean(id);
		String caminho = arquivo.getCaminho();
		FileInputStream stream = new FileInputStream(caminho);
		return file = new DefaultStreamedContent(stream, caminho, arquivo.getNome());
	}

	public void setFile(StreamedContent file) {
		this.file = file;
	}

	public Arquivos getArquivo() {
		return arquivo;
	}

	public void setArquivo(Arquivos arquivo) {
		this.arquivo = arquivo;
	}

	public List<Arquivos> getArquivos() {
		return arquivos;
	}

	public void setArquivos(List<Arquivos> arquivos) {
		this.arquivos = arquivos;
	}
}









jsf


<?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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

	<title>Arquivos</title>
</h:head>
<h:body>
	<h:form enctype="multipart/form-data" update=":form:display">
		<p:growl id="messages" />
		<div align="center">
			<p:panel header="Arquivos" style="width:1050px">
				<ui:include src="/paginas/Menu.xhtml" />


				<p:fileUpload fileUploadListener="#{arquivosBean.fileUploadAction}"
					update="display" multiple="true" />
				<br />
				´
				
				
				<p:dataTable var="arquivos" value="#{arquivosBean.listArquivos}"
					widgetVar="arquivosTable"
					emptyMessage="Nenhum arquivos Encontrado Nessas Condições"
					rowStyleClass="#{empty rowIx or rowIx
 mod 2 ne 0 ? 'even-row' : 'odd-row'}"
					rowIndexVar="rowIx" id="display" rows="30">

					<f:facet name="header">
						<p:outputPanel>
							<h:outputText value="Procurar em todos os campos:" />
							<p:inputText id="globalFilter" onkeyup="arquivosTable.filter()" />
						</p:outputPanel>
					</f:facet>

					<p:column filterBy="#{arquivos.id}" headerText="Código" footerText="Código"
						filterMatchMode="contains" style="width: 40px">
						<h:outputText value="#{arquivos.id}" style="width: 40px" />
					</p:column>

					<p:column filterBy="#{arquivos.nome}" headerText="Descrição"
						footerText="Descrição" filterMatchMode="contains">
						<h:outputText value="#{arquivos.nome}" />
					</p:column>

					<p:column filterBy="#{arquivos.tipo}" headerText="Tipo"
						footerText="Tipo" filterMatchMode="contains" style="width: 40px">
						<h:outputText value="#{arquivos.tipo}" style="width: 40px" />
					</p:column>

					<p:column filterBy="#{arquivos.tamanho}" headerText="Tamanho"
						footerText="Tamanho" filterMatchMode="contains"
						style="width: 140px">
						<h:outputText value="#{arquivos.tamanho}" style="width: 140px" />
					</p:column>



					<p:column style="width:100px">
						<h:panelGrid columns="2" styleClass="actions" cellpadding="2">

							<p:commandButton image="ui-icon-disk" title="Download"
								ajax="false">
								<f:setPropertyActionListener value="#{arquivos.id}"
									target="#{arquivosBean.arquivo.id}" />
								<p:fileDownload value="#{arquivosBean.file}" />
							</p:commandButton>

							<p:commandButton image="ui-icon-trash" title="Excluir"
							onclick="confirmation.show()">
							<f:setPropertyActionListener value="#{arquivos.id}"
									target="#{arquivosBean.arquivo.id}" />
						</p:commandButton>
						</h:panelGrid>
					</p:column>
				</p:dataTable>

<p:confirmDialog id="confirmDialog" message="Confirma Exclusão?"
			severity="alert" widgetVar="confirmation">

			<p:commandButton id="confirm" value="Sim" update="display, messages"
				oncomplete="confirmation.hide()"
				actionListener="#{arquivosBean.remove}">

			</p:commandButton>
			<p:commandButton id="decline" value="Não"
				onclick="confirmation.hide()" type="button" />
		</p:confirmDialog>

				<style>
.ui-datatable .ui-datatable-data .even-row td {
	background-color: #fcefa1;
	border-right: solid 0px #4e6769;
}

.ui-datatable .ui-datatable-data .odd-row td {
	background-color: #f7f7f7;
	border-right: solid 0px #4e6769;
}
</style>
			</p:panel>
		</div>
	</h:form>
</h:body>
</html>

lembrando que eu salvo as imagens dentro de uma pasta c:/arquivos

Testei usando seu código …
Mas também nao chamou o método : fileUploadAction

-------------- CONSOLE ---------------
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.

AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.

INFO: Skipping call to libraryExists(). Please set context-param com.sun.faces.enableMissingResourceLibraryDetection to true to verify if library http://java.sun.com/jsf/composite/exporter actually exists


cara poderia postar os teus códigos

Ei jaissonduarte, eu queria uma ajuda, vc tem msn ou gtalk? =)

ei kelymaciel
manda uma mp

Lá vai …

// 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>


//MeuBean.java
import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
  
@ManagedBean(name="meuBean")
@ViewScoped
public class MeuBean implements Serializable {  
  
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void handleFileUpload(FileUploadEvent event) {  
        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }
    
    public void teste(){
    	
    }
}  


//upload.xhtml

<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">

	<h:head>
	<title>Luirton</title>
	</h:head>
	
	<h:body>

		<h:form enctype="multipart/form-data">  
  <p:panel header="Luirton - Upload exemplo ;)">
    <p:fileUpload fileUploadListener="#{meuBean.handleFileUpload}"  
            mode="advanced"  
            update="messages"   
            multiple="true"     
            allowTypes="/(\.|\/)(gif|jpe?g|png|JGP)$/"/>  
  
    <p:growl id="messages" showDetail="true"/>  
  </p:panel>
</h:form> 
		
	</h:body>
</html>

O método : handleFileUpload não é chamado …
Porém o browser faz um post para o servidor.

Também já tentei algumas coisas como :

<context-param>
    <description>
            State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2
        </description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>
            client
        </param-value>
  </context-param>


 e 

<mime-mapping>
        <extension>java</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>cpp</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
	



Agradeço qualquer sugestão !

meu amigo joaoorso, seguinte desde que eu aprendia fazer upload com o primefaces eu faço assim:

no meu projeto eu adiciona as seguintes bibliotecas:

commons-fileupload-1.2.2.jar
commons-io-2.3.jar
primefaces-3.1.1.jar

meu Bean:

public class MeuBean implements Serializable{
   private String nome;
   private String caminho;

//gets e set
//coinstrutor

}

e crio o seguinte código com os atributos e métodos:


import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;


@ManagedBean(name = "meuMB")
@SessionScoped
public class MeuMB implements Serializable{
    private MeuBean meuBean;
    private StreamedContent file;

    public void setFile(StreamedContent file) {
        this.file = file;
    }
    
    public StreamedContent getFile(Documento documento) throws FileNotFoundException {
        //essas variáveis locais eu uso para pegar o nome e a onde eu vou guardar
        String arquivo = meuBean.getNome();
        String caminho = meuBean.getCaminho();
        FileInputStream stream = new FileInputStream(caminho);
        file = new DefaultStreamedContent(stream, caminho, arquivo);
        return file;
    }

    public void fileUploadAction(FileUploadEvent event) throws IOException {
        try {
            UploadedFile arq = event.getFile();
            InputStream in = new BufferedInputStream(arq.getInputstream());            
            File file = new File("C:/diretório onde vou guardar/"+arq.getFileName());
            meuBean.setCaminho(file.getAbsolutePath());
            FileOutputStream fout = new FileOutputStream(file);
            while (in.available() != 0) {
                fout.write(in.read());
            }

            fout.close();
            FacesMessage msg = new FacesMessage("O Arquivo ", file.getName() + " salvo.");
            FacesContext.getCurrentInstance().addMessage("msgUpdate", msg);
        } catch (Exception ex) {
            System.out.println("erro no upload "+ex.getMessage());
        }
    }
}

e a página fica assim:

&lt;h:outputText value="Carregar Arquivo"/&gt;     
&lt;p:fileUpload label="Selecionar..." fileUploadListener="#{meuMB.fileUploadAction}"  id="caminho" value="#{meuMB.caminho}"  /&gt;                

o web.xml continua igual

Coloquei um botão, só para testar a chamada ao MB:

<p:commandButton ajax="false" value="Cadastrar" id="cadastrar" immediate="true" 
    action="#{meuBean.vai}" />

Ele funciona somente se eu remover o trecho: enctype=“multipart/form-data”

No entanto, nenhum dos casos a chamada ao método : fileUploadAction acontece.

Também atualizei a versão do commons-io. de 2.0 para 2.3. Uúnico .jar o qual a versão não coincidia com a do exemplo.

Até o momento só tentativas frustradas. O listner continua surdo. :roll:

mostra a saída do terminal, ou algo parecido
coloca um system.out.println(“1”); no teu métoda para ver se é chamado ou não

Seguinte tem versoes do primefaces que pode dar alguma boberinha, eu utilizei os seguintes jar’s:
commons-fileupload-1.1.jar
commons-io-1.4.jar
primefaces-2.2.1.jar

Só adicionar ao projeto em anexo! Qualquer coisa so perguntar de novo.
Mais tem configuracao no web.xml

Adicionei os jars :
commons-fileupload-1.2.1.jar
commons-io-1.4.jar

ao build path e agora funcionou … ! (nossa que surra desse componente )

que bom funcionou :smiley:

Vixi …
Nem me fale !

Obrigado pela ajuda !

jaissonduarte obrigado cara, vc salvou minha vida! hehe… Eu estava com o mesmo problema do nosso amigo joaoorso