2016-11-07 74 views
0

我有幾個Vaadin 7會話超時的問題。首先,即使我試圖將心跳間隔改爲20秒,Vaadin調試仍然表示它的默認值爲300秒。Vaadin會話超時和通信錯誤

另一個問題是,我根本無法獲取會話超時消息,只能看到通信錯誤消息。如果會話時間爲1分鐘或2分鐘,或者超過心跳間隔,則無關緊要。

第三個問題是通信錯誤信息中始終存在「來自服務器文本的無效JSON響應」,我不知道如何擺脫該問題。

<context-param> 
    <param-name>heartbeatInterval</param-name> 
    <param-value>20</param-value> 
</context-param> 
<context-param> 
    <param-name>closeIdleSessions</param-name> 
    <param-value>true</param-value> 
</context-param> 

Vaadin communication error with invalid JSON reponse

+0

你設置這個參數? MINUTES

+0

是的。爲了測試目的,我嘗試了1分鐘到5分鐘之間的所有事情。任何想法擺脫煩人無效的JSON響應文本。我可以覆蓋其他文本,但不是。 –

回答

1

您可以使用自己的系統消息提供者類覆蓋這些消息。我曾經使用這種方式在發生這些錯誤時將用戶轉到其他網址,以便我可以在Google分析中跟蹤這些網址,但是如果您願意,可以更改消息的標題和內容。

您將需要一個SystemMessagesProvider,並在您的主UI類,你需要補充一點:

VaadinService.getCurrent().setSystemMessagesProvider(new MyMessageProvider); 

和你SystemMessagesProvider應該是這樣的:

import com.vaadin.server.CustomizedSystemMessages; 
import com.vaadin.server.SystemMessages; 
import com.vaadin.server.SystemMessagesInfo; 
import com.vaadin.server.SystemMessagesProvider; 

public class MyMessageProvider implements SystemMessagesProvider { 

    @Override 
    public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) { 


     CustomizedSystemMessages systemMessages = new CustomizedSystemMessages(); 

     systemMessages.setCommunicationErrorURL("/systemError?error=communicationError"); 
     systemMessages.setCommunicationErrorNotificationEnabled(false); 

     systemMessages.setInternalErrorURL("/systemError?error=internalError"); 
     systemMessages.setInternalErrorNotificationEnabled(false); 

     systemMessages.setSessionExpiredURL("/systemError?sessionTimeout"); 
     systemMessages.setSessionExpiredNotificationEnabled(false); 

     return systemMessages; 
    } 
+0

在我完成的另一個項目中,我將通信錯誤URL設置爲我的應用程序的URI,然後當發生通信錯誤時,它只需重新加載應用程序。用戶不會看到任何東西,但它會是一個新的VaadinSession,它對我來說很好,因爲我的應用程序是無狀態的。 –

+1

我已經做到了。問題是我從來沒有得到會話過期的文本,但通信錯誤。我決定用css來擺脫那些討厭的json文本,因爲我仍然不知道爲什麼它在那裏,並且不可能覆蓋。 – Sami