2014-02-10 147 views
2

我試圖使用p:fileUpload,但沒有調用fileUploadListener方法,也沒有生成任何異常。沒有PrettyFaces,文件上傳工作正常。文件上傳不適用於PrimeFaces 4.0,PrettyFaces 3.3.3和GlassFish 4

經過一番研究,我發現Rewrite FAQ(http://ocpsoft.org/rewrite/docs/faq)回答了「爲什麼文件上傳無法正常工作?可能是解決方案,但只在Tomcat上進行測試。我嘗試過GlassFish,但沒有成功。

然後我在OcpSoft論壇中發現了一個解決我的問題的帖子:http://ocpsoft.org/support/topic/pretty-primefaces-fileupload/page/2/#post-25781。只需將文件上傳代碼放在其他頁面源代碼中,並使用html iframe標記進行引用即可。

好吧,問題解決了,但我不滿意iframe解決方案,而fileUploadListener方法應該被稱爲沒有解決方法。那麼,誰都知道如何配置文件上傳與PrettyFaces一起使用?

Maven依賴:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>org.primefaces</groupId> 
    <artifactId>primefaces</artifactId> 
    <version>4.0</version> 
</dependency> 
<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>1.4</version> 
</dependency> 
<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId> 
    <version>1.2.1</version> 
</dependency> 

<dependency> 
    <groupId>com.ocpsoft</groupId> 
    <artifactId>prettyfaces-jsf2</artifactId> 
    <version>3.3.3</version> 
</dependency> 

的Xhtml代碼:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 

    <h:head></h:head> 

    <h:body> 

     <h:form> 
      <p:fileUpload fileUploadListener="#{fileUploadMB.handleFileUpload}" auto="true" 
       update="fileName" /> 

      <h:outputText id="fileName" value="#{fileUploadMB.uploadedFileName}" /> 
     </h:form> 
    </h:body> 

</html> 

管理的bean:

@ManagedBean 
@ViewScoped 
@URLMapping(pattern = "/index", viewId = "/index.xhtml") 
public class FileUploadMB { 

    private UploadedFile uploadedFile; 
    private String uploadedFileName; 

    public void handleFileUpload(FileUploadEvent evt) { 
     this.uploadedFile = evt.getFile(); 
     this.uploadedFileName = evt.getFile().getFileName(); 
    } 


    public String getUploadedFileName() { 
     return uploadedFileName; 
    } 


    public void setUploadedFileName(String uploadedFileName) { 
     this.uploadedFileName = uploadedFileName; 
    } 
} 

和web.xml:

<welcome-file-list> 
    <welcome-file>index.xhtml</welcome-file> 
</welcome-file-list> 

<context-param> 
    <param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name> 
    <param-value> 
     <!-- Packages with @URLMapping annotation from PrettyFaces --> 
     br.nti.ufms 
    </param-value> 
</context-param> 
<context-param> 
    <param-name>com.ocpsoft.pretty.DEVELOPMENT</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>primefaces.UPLOADER</param-name> 
    <param-value>commons</param-value> 
</context-param> 

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

<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>*.xhtml</url-pattern> 
</servlet-mapping> 

回答

2

這可能是一個過濾器鏈問題。請嘗試在您的註冊過濾器中添加以下內容:

<dispatcher>FORWARD</dispatcher> 
<dispatcher>REQUEST</dispatcher> 

查看更多的prettyfaces faq question 2

+0

它是否適用於2-3 MB以上文件大小的文件上傳? –

0

它不適用於我的Primefaces 5.0 & Prettyfaces在Tomcat 7.0.41上重寫2.0.12-final。

但之後,我從我的web.xml

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class> 
     org.primefaces.webapp.filter.FileUploadFilter 
    </filter-class> 
    <init-param> 
     <param-name>thresholdSize</param-name> 
     <param-value>51200000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>uploadDirectory</param-name> 
     <param-value>/uploadedFilesDirectoryForGlassfish</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

去除這一部分,並添加到context.xml此:

<Context allowCasualMultipartParsing="true"> 

p:fileUpload開始工作的所有罰款從改寫網址爲好。

This page可能是有用的。

另見:http://www.ocpsoft.org/rewrite/docs/faq & this SO answer


別急,

就觀察到,它正在對小文件上傳只,大文件上傳文件上傳監聽器仍然沒有觸發。任何人的解決方案?