FileUpload do primeFaces não funciona [RESOLVIDO]

Pessoal venho pedir ajuda de vcs para fazer funcionar o upload de arquivos do PrimeFaces já fazem varios dias e não consigo fazer ele funcionar

O problema é o file sempre fica NULL
MangedBean

[code]@Component
@ManagedBean(name = “entidadeBeanView”)
@ViewScoped
public class EntidadeBeanView implements ActionViewPadrao {

private String nome;  
private Entidade entidade = new Entidade();  
private List<Entidade> entidades = new ArrayList<Entidade>();  
private UploadedFile file;  

@Resource  
private EntidadeController entidadeController;  
@Resource  
private PessoaController pessoaController;  

public UploadedFile getFile() {  
    return file;  
}  

public void setFile(UploadedFile file) {  
    this.file = file;

public void upload(){

Message.info("Upload enviado " +file.getFileName());
}

[/code]

XHTML

<h:form enctype="multipart/form-data" id="formaUploadBrasa">  
                <p:panel header="Upload Brasão Entidade" >      
                    <h:panelGrid columns="3" id="gridEntidadeBrasao">               
                         <h:outputLabel for="brasao" value="Brasão * : " id="labelBrasao" />  
                         <p:fileUpload value="#{entidadeBeanView.file}"   
                         mode="simple" id="brasao" />  
                          
                        <p:commandButton  value="enviar" ajax="false" action="#{entidadeBeanView.upload}"/>   
                     </h:panelGrid>  
                </p:panel>      
            </h:form>  

se alguém poder passar um exemplo seria ótimo, já fiz igual a documentação do PrimeFaces mas também não funcionou

É bom que isso fique documentado aqui no GUJ mesmo, quebrei minha cabeça loucamente com esse componente deles e depois acabei descobrindo que a documentação do site deles está incompleta (showcase).

Para fazer o upload de arquivos funcionar é necessário ter as bibliotecas commons-io e commons-fileupload no class-path e mapegar um filtro no web.xml

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
  </filter>

Feito isso funciona como mágica.

Então as bibliotecas estão adicionadas e o filter declarado no Web.xml, mas mesmo assim ele não funciona, o Objeto file continua Nulo

ganondorfan

vc fez da mesma forma que eu fiz ali em cima ???

Eu uso da seguinte forma:

Seto um listener para o componente na view.

fileUploadListener="#{cadastroAnimalController.carregarArquivo}"  //atributo de <p:fileUpload>

E implemento o método no controller:

public void carregarArquivo(FileUploadEvent event) // metodo chamado quando o arquivo acaba de carregar no serverSide
			throws FileNotFoundException, IOException {
		
		FacesMessage msg = new FacesMessage("Sucesso "+event.getFile().getFileName()+" foi carregado.", event.getFile()
				.getFileName() + " foi carregado."); // mensagem pra saber se ouve sucesso
		
		
		arquivo = event.getFile().getFileName(); // pego o nome do arquivo
		
		
		
		
		
		String caminho = FacesContext.getCurrentInstance().getExternalContext()
				.getRealPath("\\fotos\\"+arquivo ); // diretorio o qual vou salvar o arquivo do upload, equivale ao nome completamente qualificado
		
		


		byte[] conteudo = event.getFile().getContents();  // daqui pra baixo é somente operações de IO.
		FileOutputStream fos = new FileOutputStream(caminho);
		fos.write(conteudo);
		fos.close();
		
		
		
		

	}

Espero ter ajudado.

Olha … Aqui no meu caso, esse componente não funcionou nem com reza brava !

O pior é que consegui rodar o exemplo que postaram aqui no guj :

http://depositfiles.com/files/tcqy146zq

Mas no meu projeto o componente não funciona … :roll:

Dá uma olhada nesses posts aqui


E se descobrir a mágica necessária pra fazer ele funcionar, posta aí por favor !

[quote=joaoorso]Olha … Aqui no meu caso, esse componente não funcionou nem com reza brava !

O pior é que consegui rodar o exemplo que postaram aqui no guj :

http://depositfiles.com/files/tcqy146zq

Mas no meu projeto o componente não funciona … :roll:

Dá uma olhada nesses posts aqui


E se descobrir a mágica necessária pra fazer ele funcionar, posta aí por favor !

[/quote]

Então a coisa está feia aqui, este componente realmente não funciona

Tentou adcionar o fileUploadListener ? Aqui funciona normalmente o componente.

Sim adiciononei mas ele não está sendo chamado

Galera persistencia é tudo nessa vida, acabei de descobrir o problema

Faltava apenas isso *.jsf

<filter-mapping>
		<filter-name>PrimeFaces FileUpload Filter</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern> // AQUI ESTAVA O PROBLEMA FALTAVA ESSA LINHA NO WEB.XML
	</filter-mapping>

Aqui, ainda Nada :?

posta seu código ai

tá nesse post aqui :

existem varias coisinhas para vc mudar por exemplo vc está cometendo o mesmo erro que eu penei para sanar, vc não está mapeando a url no filter nas configurações do Web.xml , depois de corrigir tente desenvolver o primeiro modelo proposto pela documentação do PrimeFaces

// No web.xml  tentei : 
<url-pattern>/*</url-pattern>
<url-pattern>/faces/*</url-pattern>
<url-pattern>*.xhtml</url-pattern> 

	<servlet>
		<servlet-name>Download Servlet</servlet-name>
		<servlet-class>servlet.DownloadServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Download Servlet</servlet-name>
		<url-pattern>/download-servlet/</url-pattern>
	</servlet-mapping>


// XHTML
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

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

	<h:form enctype="multipart/form-data">
	 	<p:fileUpload fileUploadListener="#{meuBean.handleFileUpload}" 	multiple="true"  />
	</h:form>
		
	</h:body>
</html>




import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
  
@ManagedBean(name="meuBean")
@ViewScoped
public class MeuBean   {  
  
	public void handleFileUpload(FileUploadEvent event) {
		System.out.println("Chamou ... ********************");
		UploadedFile file = event.getFile();
		//application code
	 }
}  

primefaces-3.1.1 (1).jar
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
Como tá no users_guide

Mas também tentei
primefaces-3.1.1 (1).jar
commons-io-2.3.jar
commons-fileupload-1.2.2.jar

Entre outras combinações de jar

O projeto postado aqui no guj:
http://depositfiles.com/files/tcqy146zq
funcionou

Mas no meu projeto o componente não vai …

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 )

Boa tarde,

Comigo aconteceu a mesma coisa, funcionava o exemplo postado acima e no meu projeto não… aí identifiquei que no filtro eu tava colocando a minha classe e não: org.primefaces.webapp.filter.FileUploadFilter

Quando corrigi isso passou a funcionar, porém ainda tenho uma dúvida, o componente filepuload só gera um arquivo temporário do arquivo que foi feito o uploade e eu tenho que fazer uma cópia “na mão” depois??? é esse o esquema mesmo???

Obrigado,

Você vai ter um UploadedFile na mão.
Aí vc faz o que quiser com ele: Salva em disco, em banco, joga fora …

muito boa essa dica do url-pattern.

Resolvido o problema aqui.