2012-03-01 41 views
5

Tôi đã tạo một portlet sử dụng AJAX mọi chức năng. Đó là, portlet chỉ được hiển thị một lần và tôi không sử dụng processAction hoặc tương tự.mở rộng phiên Liferay khi thực hiện cuộc gọi AJAX

Có cách nào để mở rộng phiên của người dùng bằng cách sử dụng chức năng Liferay được tích hợp bằng javascript không?

tôi đã cố gắng

Liferay.Session.extend(); 

nhưng nó dường như không làm việc ..

Tôi cũng đã thử một giải pháp trong diễn đàn ICEfaces, đó là

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}); 

cũng không làm việc ..

Tôi đặt các khối mã đó bất cứ khi nào người dùng nhấp vào nút

Mọi mẹo sẽ giúp ích rất nhiều ..

+1

'Liferay.Session.extend();' là câu trả lời, tôi không nhận thấy rằng phiên được mở rộng khi kiểm tra mã – ton

+0

Xin chào, vui lòng tạo câu trả lời và đưa giải pháp của bạn từ nhận xét lên và chấp nhận nó. Bằng cách đó mọi người sẽ ngay lập tức biết rằng có giải pháp cho câu hỏi này. –

Trả lời

4

Tôi đã gặp phải vấn đề tương tự và đã giải quyết vấn đề. Ý tưởng chính là để ghi đè session.js vào ext-plugin, và thêm một số phương pháp bổ sung:

extendExternal: function() { 
    var instance = this; 

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

cũng phương pháp setcookie nên được cập nhật:

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); 
} 

Để sử dụng một đường dẫn cookie cho mỗi trang.

Và một số sự kiện ajax toàn cầu có thể được sử dụng cho cuộc gọi 'tự động' của phương pháp 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(); 
    } 
    } 
}); 
}); 

trong trường hợp này mở rộng phương pháp đã được cập nhật với:

// 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' 
}); 

Bạn có thể kiểm tra giải pháp here.

+0

Cân nhắc cải thiện câu trả lời này để chứa nhiều hơn chỉ là một liên kết. Xem http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

1

Liferay.Session.extend(); là câu trả lời, tôi không nhận thấy rằng phiên được mở rộng khi kiểm tra mã

Các vấn đề liên quan