2012-02-05 89 views
1

我正在使用PrimeFaces 3并尝试上传文件,但是当我调试文件时始终为空。 下面你可以看到我的代码。任何人都可以发现问题是什么?PrimeFaces上传文件不上传

<h:form enctype="multipart/form-data"> 

     <p:fileUpload value="#{uploadFileMB.file}" mode="simple" /> 
     <p:commandButton value="Submit" ajax="false" action="#{uploadFileMB.submit()}"/> 
     <h:outputLabel value="#{uploadFileMB.text}" /> 

</h:form> 



import javax.enterprise.context.SessionScoped; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.RequestScoped; 
    import org.primefaces.model.UploadedFile; 


    @ManagedBean 
    @SessionScoped 
    public class UploadFileMB { 
    UploadedFile file; 
    String text; 

     public String getText() { 
      return text; 
     } 

     public void setText(String text) { 
      this.text = text; 
     } 


     public UploadedFile getFile() { 
      return file; 
     } 

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

     public void submit(){ 


     System.out.println("Trial "+file); 
     UploadedFile a=file; 
     if(file==null) 
      text="not uploaded"; 
     else 
      text=file.getFileName()+" uploaded"; 
       } 
     /** Creates a new instance of UploadFileMB */ 
     public UploadFileMB() { 
     } 
    } 



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

而且在这两个web.xml和faces.config 过滤器我已经尝试了一些建议和调试了很多次,但我无法弄清楚。

这是我的脸,配置:

<?xml version='1.0' encoding='UTF-8'?> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config version="2.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    > 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId> commons-fileupload</artifactId> 
      <version>1.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId> commons-io</artifactId> 
      <version>2.1</version> 
     </dependency> 
<lifecycle> 
<phase-listener>security.SecurityFilter</phase-listener> 
</lifecycle> 


<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    <init-param> 
     <param-name>uploadDirectory</param-name> 
     <param-value>C:/home/vanessa/Desktop</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 



</faces-config> 

回答

0

我觉得这两个文件是在项目中缺少的; commons-fileupload和commons-io。如果你的项目是maven,你可以将它们添加到你的pom.xml中;

 <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId> commons-fileupload</artifactId> 
      <version>1.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId> commons-io</artifactId> 
      <version>2.1</version> 
     </dependency> 

否则请从http://commons.apache.org下载它们并添加您的库。

+0

谢谢。但它不起作用。我没有maven,所以我刚刚添加了上面写的jar和代码,但它仍然不起作用。其他建议?再次感谢! – Viola 2012-02-05 13:07:43

+0

你的托管bean应该实现Serializable,可能是它对你的错误 – Jman 2012-02-05 13:27:50

+0

谢谢。我添加了“实现可序列化”,但它仍然不起作用。任何其他IDE?我已经添加到我的问题我的面孔配置。 – Viola 2012-02-05 15:00:28

0

嗯,我看到你的代码有三个错误,它可以解决你的问题,我不保证任何东西。

首先,您是从错误的包装中导入@SessionScope,应该是javax.faces.bean.SessionScoped,另一个等级是CDI

其次,让你的属性在豆private我不确定它是否属于这样的属性。这也是尽可能隐藏领域的好习惯。

第三,也是最重要的,将action更改为actionListener并尝试。如果仍然不起作用,请尝试添加到您的方法参数ActionEvent event(并小心选择合适的包装,我曾经从javax.awt.导入ActionEvent并花费两个小时计算出哪里可能出现问题:-)