Primefaces FileUpload evento non sparo – JSF 2.0

Ho postato la mia domanda sul Primefaces forum, ma nessuno ha risposto, così ho pensato che mi piacerebbe provare qui.

Ho cercato di ottenere fileUpload a lavorare per qualche tempo. Sono attualmente in esecuzione la RC2 build con mojarra 2.0.3 e Tomcat 7.

Ho una finestra di dialogo che contiene il componente fileUpload piace così.

<p:dialog id="uploadFileDialog" >
   <h:form id="uplaodFileForm" prependId="false" enctype="multipart/form-data">
       <p:fileUpload fileUploadListener="#{fileUploadController.uploadFile} auto="true"/>    
   </h:form>
</p:dialog>

Il fileUploadController simile a questo

public class FileUploadController {
    public void uploadFile(FileUploadEvent event) {
         byte[] file = event.getFile().getContents();

         System.out.println("MADE IT INTO FILE UPLOAD !!! ");
    }
}

Per qualche ragione, quando il file viene caricato non è mai attiva il fileUploadEvent e non si arriva mai nel controller. Il caricamento sembra il suo lavoro, il flash parte il rendering e dà l’impressione che si sta facendo qualcosa, ma non backing bean è mai chiamato. Io riesco a capire che cosa sto facendo di sbagliato e ho letto ogni post sul caricamento di un file utilizzando primefaces. Qualcuno sa di cosa sto facendo di sbagliato?

  • PF 2.1 caricamento di file non funziona qui su Tomcat 7.0.5 così. Vedo ViewExpiredException nel log del server su ogni tentativo di caricare. PF forum report lo stesso in diversi argomenti: “le opere in Tomcat 6, ma non su Tomcat 7”. Non si vede nulla nel log del server?
  • Non mostrare alcuna eccezione nel log del server per me. Dimostra nulla. Ma questa non è una buona notizia. Non c’è alcuna alternativa a questo modo posso caricare i file? Questa è una parte fondamentale della mia applicazione.
  • Effettivamente ora che guardo in esso ottengo un’eccezione che è questo java.lang.ClassNotFoundException: org.apache.commons.io.uscita.DeferredFileOutputStream su una nota di parte, voglio ringraziarti per il tuo codice sul tuo blog. Hai davvero mi ha salvato un enorme quantità di tempo passato con i problemi che ho riscontrato con il dettaglio delle soluzioni! La ringrazio molto per quello che fai
  • Suggerimento: per rispondere ai commenti di altri post che non sono di loro proprietà, uso @nickname di auto-notifica. Vedi anche meta.stackexchange.com/questions/43019/… Come il mio ViewExpiredException problema, potrebbe essere risolto in 2.2 RC2. Non ho ancora provato. Fammi sapere se funziona.
  • Sto usando 2.2RC2 ora. Anche se non ho incontro ViewExpiredException, poiché io sto usando Glassfish, fileUploadEvent mai licenziato nel mio caso
  • In altre parole, il problema non è ancora risolto? Come circa l’eccezione si ha nel log?
  • Purtroppo, non vedo alcuna eccezione sul mio server del GF3.0.1. Ho avuto org.primefaces.webapp.filter.FileUploadFilter all’interno del mio web.xml. Ho avuto commons-io-1.4/2.0 e commons-fileupload-1.2.1/1.2.2. Quando cerco di caricare, debugger non si ferma, logger registra nulla, mostrando che ho avuto all’interno del metodo che mano fileUploadEvent. Sarebbe u gentilmente e prova la vetrina per me. Prova la vetrina sia su FF e chrome. Quando mi carica solo l’animazione, ma il growl non viene visualizzato il messaggio
  • Avete tutti i filtri nella web.xml che potrebbe essere intercettazione su multipart/form-data richieste?
  • solo PrimeFaces FileUpload Filter con <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>. Che è l’unico filtro che ho, e dal mio capire, abbiamo bisogno di filtro per primefaces carica di componente. Posso sbagliarmi, però. Il tuo articolo su upload con JSF2.0 è ajax caricare?
  • oh oh, in realtà, penso a cosa ho fatto di sbagliato qui. Quando creo PrimeFaces FileUpload Filter non ho creato un filter-mapping per esso. Così ora ho la mappa del filtro sul Faces Servlet e di lavoro. uhmm 🙂 Non so se questo può aiutare DesireToUpload dal momento che non so nulla di Tomcat. Non sono sicuro se è la stessa

 

6 Replies
  1. 19

    java.lang.ClassNotFoundException: org.apache.commons.io.uscita.DeferredFileOutputStream

    PrimeFaces fileupload utilizza Apache Commons FileUpload sotto le coperte, che a sua volta ha un’altra dipendenza, il Apache Commons IO. Assicurarsi che entrambi avete VASO nel vostro /WEB-INF/lib.


    Aggiornamento: come per i commenti, è anche necessario garantire che il caricamento del filtro è stata dichiarata web.xml come per il guida per gli utenti:

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

    Ed è anche necessario per garantire che non ci sono altri filtri prima in web.xml che può essere la lettura del HttpServletRequest#getInputStream(), perché può essere letto solo una volta.

    • Utente guida di link non funziona… conosci qualche altro modo per ottenere l’apparentemente molto gelosamente custodito bozza di lavoro del PrimeFaces 3 guida dell’utente?
    • Avviare nel proprio sito: primefaces.org. Ho corretto il link obsoleto.
    • assolutamente questa è la risposta, la ringrazio BalusC
  2. 3

    Ho anche sperimentato un problema simile. Il fix per me (utilizzando un progetto Maven) è stato aggiungere le seguenti dipendenze pom.xml file:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
        </dependency>

    Questo è l’equivalente di avere il corrispondente .i file jar in WEB-INF/lib, in modo da provare a farlo, se questo non è un progetto Maven.

  3. 3

    che è corretto è necessario aggiungere

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

    E dopo questo

    <!-- JSF mapping -->
    <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!-- Map these files with JSF -->
    <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>

    aditionaly se l’utilizzo di maven aggiungere questo dipendenze

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.1</version>
    </dependency>     
    <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-io</artifactId>
         <version>1.3.2</version>
    </dependency>
    <dependency>
         <groupId>portlet-api</groupId>
         <artifactId>portlet-api</artifactId>
         <version>1.0</version>
    </dependency>
  4. 2

    penso di aver risolto il tuo problema.
    Controllare sulla web.xml la presenza di:

    <context-param>
        <param-name>com.sun.faces.enableViewStateIdRendering</param-name>
        <param-value>false</param-value>
    </context-param>

    È necessario eliminare questa opzione o impostarlo fare True (valore predefinito).

  5. 2

    Ho lo stesso problema, ho risolto con l’aggiunta di

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

    come BalusC detto.

    ma aggiungendo questo :

    <!-- JSF mapping -->
    <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    
    <!-- Map these files with JSF -->
    <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>

    Perché per impostazione predefinita in J2EE 6 questa parte è opzionale, JSF 2.0 Servlet si attiva automaticamente quando l’WEB-INF/faces-config.xml il descrittore è presente.

    Ma è necessario attiva correttamente PrimeFaces Filtro

    Jboss 6.1.0.Finale /PrimeFaces 3.0.RC2

  6. 1

    In Websphere 7 l’evento viene attivato quando si seleziona il file e premere upload riesco a vedere la barra di caricamento che crescere.
    Il problema è che in Websphere 7 suppongo che ci sono un filtro che consumano HttpRequest e quando arrivano all’ascoltatore di eventi è appena consumate in modo non dispone di dati 🙁

    Nessun messaggio sono presenti nel registro di debug è molto complicato. Esiste qualche traccia o logger per attivare in JSF 2 Mojarra 2 e PrimeFaces 3.4.2?

Lascia un commento