2015-09-25 31 views
6

È possibile che si verifichi un timeout della sessione se sono caricati diversi file di grandi dimensioni? Immagina di caricare un file da 5 GByte e di impostare un timeout di sessione breve. È possibile che si verifichi il timeout della sessione durante lo streaming del file?Primefaces fileCarico di caricamento e sessione

risposta

8

Sì, è possibile. Lo servlet specification non impedisce in alcun modo che una sessione possa essere distrutta durante una richiesta attiva. Rischerai quindi un ViewExpiredException quando un tale caricamento arriva al bean.

Se questa è la vostra preoccupazione, hai diverse opzioni:

  1. Diamo il modulo di upload in modo asincrono il polling al server a intervalli per mantenere viva la sessione. In EL è possibile utilizzare #{session.maxInactiveInterval} per ottenere il timeout corrente in secondi.

    <p:fileUpload ... /> 
    <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" /> 
    

    La differenza di 10 secondi è proprio per evitare che arriva pochi secondi troppo tardi, perché la pagina stessa può anche richiedere un certo tempo per caricare tutto il codice HTML e per inizializzare il sondaggio. Puoi, se necessario, avviare/rendere condizionatamente il sondaggio all'avvio del caricamento.


  2. Facciamo l'evento "OnStart" della caricati aumentare il timeout di sessione ad un certo limite (ora?) E lasciare che l'evento "onComplete" di caricare rimetterlo.

    <p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" /> 
    <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" /> 
    <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" /> 
    

    È possibile in uso fagioli ExternalContext#setSessionMaxInactiveInterval() per impostare il timeout di sessione in secondi.


  3. usare una forma stateless JSF. La vista non scadrà mai, indipendentemente da come si comporta la sessione HTTP.

    <f:view transient="true"> 
        ... 
    </f:view> 
    

    Nota: qualsiasi vista ambito fagioli legate a una tale prospettiva si comporterà come quelle di richiesta ambito. Per evitare confusione, sostituire le annotazioni se necessario.

+0

Grazie mille. Userò l'opzione 2 perché 'p: fileUpload' non è più visibile nel mio caso quando il caricamento è terminato. È all'interno di una finestra di dialogo che verrà chiusa e il caricamento verrà avviato tramite una chiamata javascript. – opfau

+0

Prego. – BalusC

+1

+1 per la menzione del modulo stateless JSF! : D non lo sapeva fino ad ora. in che versione jsf sarà disponibile? – Fritz