2013-10-04 15 views
6

Non riesco a rendere componente FileUpload su PrimeFaces 3.5 per attivare l'evento. Ho letto molti post su questo argomento e ho seguito l'avviso, ma ancora non funziona. Ho provato tutte le modalità (semplice, auto, avanzata) senza successo.fileUpload non attiva l'evento in PrimeFaces 3.5 con JSF 2.2

Se utilizzo il tag standard inputFile dalle specifiche JSF, funziona correttamente.

Questo è il mio file web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<context-param> 
    <param-name>primefaces.THEME</param-name> 
    <param-value>redmond</param-value> 
</context-param> 
<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> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>faces/home.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

e questo fa parte della mia pagina di visualizzazione con il tag FileUpload:

<h:form enctype="multipart/form-data"> 
    <p:dialog id="basicDialog" header="Add pictures" widgetVar="dlg1" > 
     <p:fileUpload fileUploadListener="#{galleryManagedBean.addPicturesToGallery}" multiple="true"/> 
    </p:dialog> 
</h:form> 

L'estratto dal bean gestito con il metodo che si chiama dal tag:

@Named(value = "galleryManagedBean") 
@RequestScoped 
public class GalleryManagedBean { 
    public void addPicturesToGallery(FileUploadEvent event) 
    { 
     System.out.println("Triggered upload"); 
    } 
} 

Inoltre, vorrei aggiungere che la richiesta POST Http viene attivata correttamente dopo I controllato usando lo strumento debugger in Chrome.

ho aggiunto librerie necessarie al classpath vale a dire:

commons-fileupload-1.3.jar 
commons-io-2.4.jar 
+1

PF 3.5 è sviluppato specificamente per JSF 2.0/2.1 e non necessariamente garantito per funzionare con JSF 2.2. PF 4.0 è stato sviluppato appositamente per/con JSF 2.2 e per coincidenza è stato rilasciato solo 2 giorni fa. Suggerisco di fare un tentativo. – BalusC

+0

Bingo! Funziona correttamente con PF 4.0. Grazie @BalusC! – bajer83

+0

Grande. Ho fatto qualche ricerca in più e ho postato una risposta. – BalusC

risposta

6

questo è causato da un cambiamento nella FacesServlet di JSF 2.2. Da tale versione, FacesServlet supporta in modo nativo i caricamenti di file (in particolare: richieste multipart/form-data HTTP) grazie alla presenza della nuova annotazione @MultipartConfig specifica di Servlet 3.0. Inoltre, è stato introdotto un nuovo componente <h:inputFile> per offrire un componente di caricamento file nel set di componenti JSF standard.

Ciò è in conflitto con la funzione di caricamento file PrimeFaces nelle versioni precedenti di PrimeFaces 3.x che non hanno tenuto conto di questa nuova funzionalità JSF 2.2. Il filtro di caricamento del file PrimeFaces 3.x ha analizzato e consumato l'intera richiesta mentre dovrebbe lasciare questo lavoro fino al FacesServlet. Ciò ha impedito a FacesServlet di decodificare correttamente la richiesta HTTP (determinando i valori e le azioni inviati).

PrimeFaces 4.0, progettato specificamente per JSF 2.2, ha tenuto conto di tutto questo. In this changeset del filtro di caricamento file PrimeFaces è possibile visualizzare le modifiche apportate per riconoscere JSF 2.2 e ignorare l'analisi nel filtro. In teoria, dovrebbe anche essere sufficiente rimuovere completamente la registrazione del filtro di caricamento del file da web.xml in modo che non venga più utilizzata.

Dovrebbe funzionare correttamente se si esegue l'aggiornamento a PrimeFaces 4.0. È stato rilasciato per coincidenza ufficialmente solo 2 giorni fa, quindi sei abbastanza in tempo per quello.

Problemi correlati