2017-01-13 79 views
3

我正在開發一個帶有JSF 2.2Primefaces的Java Web應用程序。我希望用戶可以上傳單個文件;爲此,我使用了Primefaces 6.0,但它不起作用,我只是用Primefaces 5.x找到了教程(和示例),它不能與Primefaces 5.0一起使用。爲什麼UploadedFile爲空?

我主張與Primefaces 6.0一起工作,但如果你可以幫我一個Primefaces 5.x版本,沒關係。

我的web.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>primefaces.THEME</param-name> 
     <param-value>bootstrap</param-value> 
    </context-param> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 
    <filter> 
     <filter-name>primeFacesFileUploadFilter</filter-name> 
     <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>primeFacesFileUploadFilter</filter-name> 
     <servlet-name>facesServlet</servlet-name> 
    </filter-mapping> 
    <context-param> 
     <param-name>primefaces.UPLOADER</param-name> 
     <param-value>commons</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> 
</web-app> 

我的豆代碼

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.context.FacesContext; 
import org.primefaces.model.UploadedFile; 

@ManagedBean 
@RequestScoped 
public class ZipBean{ 

    UploadedFile arch; 

    public ZipBean() { 
    } 

    public void subir() { 
     try { 
      FacesContext context = FacesContext.getCurrentInstance(); 
      if (this.arch != null) { 
       context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "PERFECT!","PERFECT!")); 
      } else { 
       context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "FILE NULL","FILE NULL")); 
      } 
     } catch (Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 

    public UploadedFile getArch() { 
     return arch; 
    } 

    public void setArch(UploadedFile arch) { 
     this.arch = arch; 
    } 

} 

我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://xmlns.jcp.org/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <p:growl autoUpdate="true"/> 
     <h:form enctype="multipart/form-data"> 
      <p:fileUpload mode="simple" value="#{zipBean.arch}" /> 
      <p:commandButton value="Upload" action="#{zipBean.subir}" ajax="false" /> 
     </h:form> 
    </h:body> 
</html> 

當我上傳文件時,p:grow顯示信息FILE IS NULL

我的下一個jar庫:

  • 公地文件上傳-1.3.1.jar
  • 公地IO-2.4.jar

謝謝!

回答

2

以下是如何使用primefaces 5.0上傳文件的示例;你不需要commons-fileupload-1.3.1.jar和commons-io-2.4.jar;而且你不需要改變的web.xml,並宣佈咆哮內H:形式 更多信息,請參閱本How to upload file in primefaces

FileUploadView的.java

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.context.FacesContext; 
import org.primefaces.model.UploadedFile; 
@ManagedBean 
public class FileUploadView { 
    private UploadedFile file; 
    public UploadedFile getFile() { 
     return file; 
    } 
    public void setFile(UploadedFile file) { 
     this.file = file; 
    } 
    public void upload() { 
     if(file.getSize() > 0) { 
      FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded."); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
     } 
else{ 
    FacesMessage message = new FacesMessage("Not Succesful", "file is not uploaded"); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
} 
    } 
} 

basic.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://xmlns.jcp.org/jsf/html" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
<h:form enctype="multipart/form-data"> 
    <p:growl id="messages" showDetail="true" /> 

    <p:fileUpload value="#{fileUploadView.file}" mode="simple" skinSimple="true"/> 

    <p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadView.upload}" /> 
</h:form> 
    </h:body> 
</html> 
+0

完美!非常感謝你! –