2013-02-20 71 views
2

我正在使用PrimeFaces <p:fileUpload>。它不调用侦听器方法。如果我添加FileUploadFilter,那么我会得到一个异常。PrimeFaces uploadFile不起作用

查看:

<h:form enctype="multipart/form-data"> 
    <p:fileUpload mode="advanced" 
     fileUploadListener="#{fileUploadController.upload()}" 
     allowTypes="/(\.|\/)(gif|jpg|jpeg|gif|png|PNG|GIF|JPG|JPEG)$/" 
     auto="false" /> 
</h:form> 

豆:

public class fileUploadController { 

    private String destination = "c:\test"; 

    public void upload(FileUploadEvent event) { 
     FacesMessage msg = new FacesMessage("Success! ", event.getFile() 
       .getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     // Do what you want with the file 
     try { 
      copyFile(event.getFile().getFileName(), event.getFile() 
        .getInputstream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    public void copyFile(String fileName, InputStream in) { 
     try { 

      // write the inputStream to a FileOutputStream 
      OutputStream out = new FileOutputStream(new File(destination 
        + fileName)); 

      int read = 0; 
      byte[] bytes = new byte[1024]; 

      while ((read = in.read(bytes)) != -1) { 
       out.write(bytes, 0, read); 
      } 

      in.close(); 
      out.flush(); 
      out.close(); 

      System.out.println("New file created!"); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

的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> 
+0

签出本教程:http://www.java-tutorial.ch/java-server-faces/file-upload -with-primefaces – Ioan 2013-02-20 09:13:45

+0

你会得到什么例外? “Faces Servlet”是您的jsf servlet的名称吗?否则必须调整以下行: <滤波器映射> PrimeFaces文件上传过滤 面临的Servlet 成 <滤波器映射> PrimeFaces文件上传过滤 你的servlet名称该处 mooonli 2013-02-20 09:20:34

+0

面孔Servlet是不是名字对于我的jsf servlet, – PyaePhyoAung 2013-02-20 10:12:48

回答

0

fileUploadListener="#{fileUploadController.upload()}"是问题就在这里。我再现了这一点,我也有一个例外方法没有找到:

你应该定义fileUploadListener没有括号。当你添加括号时,bean中预期的方法是上传()而不是上载(FileUploadEvent事件)