2012-03-01 8 views
5

Ho creato un portlet che utilizza AJAX ogni funzione. Ovvero, il portlet viene eseguito solo una volta e non ho utilizzato processAction o simili.estendere la sessione di Liferay durante l'esecuzione della chiamata AJAX

C'è un modo per estendere la sessione dell'utente utilizzando la funzione incorporata di Liferay usando javascript?

ho cercato

Liferay.Session.extend(); 

ma non sembra funzionare ..

Ho anche provato una soluzione nel forum ICEfaces, che è

if (Liferay.Session._stateCheck) { 
      window.clearTimeout(Liferay.Session._stateCheck); 
      Liferay.Session._stateCheck = null; 
     } 
     Liferay.Session.init({ 
      autoExtend: false, 
      timeout: Liferay.Session._timeout, 
      timeoutWarning: Liferay.Session._warning 
      });jQuery.ajax({url: Liferay.Session._sessionUrls.extend}); 

anche non funziona ..

Metto quei blocchi di codice ogni volta che l'utente fa clic su un pulsante

Qualsiasi suggerimento sarebbe di grande aiuto ..

+1

'Liferay.Session.extend();' è la risposta, non ho notato che la sessione viene estesa durante il test del codice – ton

+0

Ciao, per favore crea una risposta e metti la tua soluzione dal commento ad essa, e accettala. In questo modo le persone sapranno immediatamente che esiste una soluzione per questa domanda. –

risposta

4

Ho avuto lo stesso problema e risolto. L'idea principale è quella di ignorare session.js in ext-plugin, e aggiungere un po metodo aggiuntivo:

extendExternal: function() { 
    var instance = this; 

    if (instance != undefined) { 
    instance.extend(); 
    } 
} 

anche il metodo setCookie dovrebbe essere aggiornato:

setCookie: function(status) { 
    var instance = this; 

    var currentTime = new Date().getTime(); 

    var options = { 
     secure: A.UA.secure, 
     path: "/" 
    }; 

    A.Cookie.set(instance._cookieKey, status || currentTime, options); 
} 

Per poter utilizzare lo stesso percorso del cookie per ogni pagina.

E qualche evento ajax globale può essere utilizzato per la chiamata 'automatico' del metodo di extendExternal:

AUI().use('event', function(A){ 
A.on('io:start', function(transactionid, arguments){ 
    if (Liferay.Session._cookieKey != undefined && Liferay.Session._cookieKey != null) { 
    if (arguments != 'sessionExtend') { 
     Liferay.Session.extendExternal(); 
    } 
    } 
}); 
}); 

in questo caso di estendere il metodo devono essere aggiornate con:

// added in order to differentiate session extend ajax calls and other ajax call, to  avoid infinit loop 
A.io.request(instance._sessionUrls.extend, { 
    arguments: 'sessionExtend' 
}); 

È possibile controllare soluzione here.

+0

Considera di migliorare questa risposta per contenere più di un semplice collegamento. Vedi http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

1

Liferay.Session.extend(); è la risposta, non ho notato che la sessione è estesa durante il test del codice