2013-12-10 99 views
3

我在使用<p:fileupload>的頁面上使用PrettyFaces時遇到了一些問題。使用PrettyFaces和JSF 2.2.3 Primefaces FileUpload

當我禁用頁面上的PrettyFaces過濾器時,一切正常。當我把它放回去時,我可以看到網頁瀏覽器上的HTTP流量,但我的文件上傳處理程序永遠不會被觸發。

這是代碼的一些相關部分。

任何幫助,將不勝感激!

我.xhtml

<h:form id="formImportarSNs" enctype="multipart/form-data"> 
<p:fieldset legend="Admin Panel">  
    <p:fileUpload value="#{adminPanelBean.file}" mode="simple"/>        
    <p:commandButton ajax="false" actionListener="#{adminPanelBean.upload}"   value="confirm" /> 

</p:fieldset> 
</h:form> 

我backingBean

package br.sgrd.bean; 

import javax.annotation.PostConstruct; 
import javax.annotation.PreDestroy; 
import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

import org.primefaces.model.UploadedFile; 

@ViewScoped 
@ManagedBean 
public class AdminPanelBean{ 

    private UploadedFile file; 

    public void upload() {  
     if(arquivo != null) {  
      FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + "  is uploaded.");  
      FacesContext.getCurrentInstance().addMessage(null, msg);  
     }  
    } 

    // getters/setters/etc 

} 

我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>GRD</display-name>  

    <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>    
    <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> 
     <url-pattern>/*</url-pattern> 
     <servlet-name>Faces Servlet</servlet-name> 
     <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 



</web-app> 

我很-config.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces 
         http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config- prettyfaces.xsd"> 

    <url-mapping id="admin_panel"> 
     <pattern value="/admin_panel" /> 
     <view-id value="/faces/xhtml/admin_panel.xhtml" /> 
    </url-mapping> 

</pretty-config> 

編輯:清理了一些代碼。

回答

10

我找到了解決方案。

創建的META-INF文件夾中的context.xml,並把這個代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<Context allowCasualMultipartParsing="true"> 
</Context> 

您可以從web.xml

刪除文件上傳過濾器在那裏我找到了解決辦法:http://ocpsoft.org/rewrite/docs/faq

而這爲什麼你需要把它:How to use HttpServletRequest#getParts() in a servlet filter running on Tomcat?

如果你的問題是大小的文件,看看:<p:fileUpload> limiting to 2 Mb

+0

是否對文件上傳上述2-3 MB文件大小的工作?在我的情況下,它適用於添加解決方案後的小圖片上傳,但不適用於較大的文件上傳。 –

+0

看看這個問題:http://stackoverflow.com/questions/21256767/pfileupload-limiting-to-2-mb – Rodrigo

+0

謝謝..它會更好,如果你在你的答案中包含此鏈接,使其更完整, 。 –

0

它不工作得很好。適用於上傳小文件。如果該文件是幾MB,他不能調用該方法。我不建議使用Primefaces +漂亮的面板。

如果你的情況是上傳小文件可以工作。刪除web.xml的primefaces文件上傳配置並創建上述的context.xml文件。

我做了'rewrite-servlet-2.0.9.Final.jar'。它與上傳小文件完美配合。

+0

http://stackoverflow.com/questions/21256767/pfileupload-limiting-to-2-mb –

-1

使用在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> 
    <url-pattern>*.jsf</url-pattern> 
</filter-mapping>