Olá, eu vi que esse é um problema que muita gente tem, já procurei bastante nos foruns e não consegui de jeito nenhum fazer funcionar o FileUpload do Primefaces.
SERVIDOR: GLASSFISH 4.0
O que eu importei na Libraries:
primefaces-3.5
commons-fileupload-1.3.jar
commons-io-2.4
Estava tentando implementar o FileUpload numa aplicação já pronta e como não estava conseguindo, resolvi criar um projeto teste do zero, mais simples possível para testar o FileUpload e mesmo assim o negócio não funciona.
Segue o xml:<?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>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
<filter>
<filter-name>primeUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>primeUploadFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
</web-app>
o index.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>teste</title>
</h:head>
<h:body>
<h:form enctype="multipart/form-data">
<p:fileUpload fileUploadListener="#{fileUploadMB.doUpload}" mode="advanced" dragDropSupport="false" update="messages" sizeLimit="100000" allowTypes="/(\.|\/)(txt)$/" />
<h:panelGrid columns="4" cellpadding="5">
<h:outputLabel for="name" value="Name:" style="font-weight:bold"/>
<p:inputText id="name" value="#{fileUploadMB.firstname}" />
<p:commandButton value="Submit" update="display,messages"/>
<h:outputText value="#{fileUploadMB.firstname}" id="display" />
<p:growl id="messages" showDetail="true"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
e o bean:
package bean;
import java.io.Serializable;
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.UploadedFile;
/**
*
* @author eu
*/
@SessionScoped
@ManagedBean
public class FileUploadMB implements Serializable {
private String firstname;
public String getFirstname() {
System.out.println("Chegou GETFIRSTNAME..................................");
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, new FacesMessage("firstname = ", firstname));
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public void doUpload(FileUploadEvent fileUploadEvent) {
System.out.println("Chegou aqui..................................");
UploadedFile uploadedFile = fileUploadEvent.getFile();
String fileNameUploaded = uploadedFile.getFileName();
long fileSizeUploaded = uploadedFile.getSize();
String infoAboutFile = "<br/> Arquivo recebido: <b>" +fileNameUploaded +"</b><br/>" + "Tamanho do Arquivo: <b>"+fileSizeUploaded+"</b>";
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, new FacesMessage("Sucesso", infoAboutFile));
}
}
Como é um teste, queria ver se o bean está funcionando direitinho, por isso tem o panelGrid para exibir o que o usuario digita no input, este está sendo exibido corretamente.
Porém no método doUpload que recebe como parâmetro o FileUploadEvent coloquei na primeira linha um simples println para saber que chegou naquela linha, mas nada sai no log do servidor. Já no caso do método getFirstname() a saída "Chegou GETFIRSTNAME.................................." é mostrada no log corretamente.....
Portanto creio que a falha está no FileUploadEvent mas sei mais o que fazer.
Quem puder me ajudar eu agradeço!!