2013-12-10 3 views
3

У меня возникают проблемы с PrettyFaces на страницах, которые я использую <p:fileupload>.Primefaces FileUpload с PrettyFaces и JSF 2.2.3

Когда я отключу фильтр 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

Я нашел решение.

Создание context.xml в папке META-INF и поместить этот код:

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

Вы можете удалить фильтр FileUpload из 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 Мб размер файла? В моем случае он работает для небольших загрузок изображений после добавления вашего решения, но не для больших загрузок файлов. –

+0

Взгляните на этот вопрос: http://stackoverflow.com/questions/21256767/pfileupload-limiting-to-2-mb – Rodrigo

+0

Спасибо .. было бы лучше, если бы вы включили эту ссылку в свой ответ, чтобы сделать ее более полной, , –

0

Это не работает очень хорошо. Работает с загрузкой небольших файлов. Если файл составляет несколько МБ, он не может вызвать метод. Я не рекомендую использовать Primfaces + surfacefaces.

Если ваш случай загружается, файлы могут работать. Удалите конфигурацию файловой конфигурации mainfaces web.xml и создайте файл 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> 
Смежные вопросы