我想用戶會話支持添加到我的應用程序。由於重新加載頁面將重新啓動應用程序,甚至打開另一個瀏覽器選項卡將導致原來的'不同步'問題。如何支持用戶會話Vaadin項目
我是否需要爲每個登錄一個獨立的窗口,或者是有任何的插件,我可以使用,或者,如果我讓一個Spring + Vaadin的應用程序,它會解決這個問題?
我想用戶會話支持添加到我的應用程序。由於重新加載頁面將重新啓動應用程序,甚至打開另一個瀏覽器選項卡將導致原來的'不同步'問題。如何支持用戶會話Vaadin項目
我是否需要爲每個登錄一個獨立的窗口,或者是有任何的插件,我可以使用,或者,如果我讓一個Spring + Vaadin的應用程序,它會解決這個問題?
重新加載頁面應該不是重新啓動應用程序,除非您的網址以?restartApplication=true
結尾。
的應用對象存儲在HTTP會話中,因此,你要每個用戶存儲可以與應用程序相關聯的一切。
通常,每個瀏覽器進程只能支持一個HTTP會話,因此每個瀏覽器只能支持一個用戶(除非您花費大量精力,並在每個應用程序級別的窗口中存儲每個用戶的狀態。除非你知道你在做什麼,否則不要這樣做:一個用戶per-http-session是web應用程序中的常態)
Spring + Vaadin是一個很好的組合 - 我正在使用這個配對,項目 - 但在這方面並不特別有用。
Vaadin不支持多窗口/標籤在它的默認配置(因此你出的同步誤差)。但是,編寫代碼很簡單:here's a simple explanation, and some code
使用Vaadin Framework創建的應用程序會自動處於有狀態,因此您的應用程序應保持其狀態,除非您在URL中具有?restartApplication參數。
爲了支持multible瀏覽器標籤/在同一個會話窗口中,getWindow(字符串名稱)必須在應用程序類中重寫返回一個新的窗口實例對每個瀏覽標籤/窗口:
@Override
public Window getWindow(String name) {
// If the window is identified by name, we are good to go
Window w = super.getWindow(name);
// If not, we must create a new window for this new browser window/tab
if (w == null) {
w = new CalcWindow();
// Use the random name given by the framework to identify this
// window in future
w.setName(name);
addWindow(w);
// Move to the url to remember the name in the future
w.open(new ExternalResource(w.getURL()));
}
return w;
}
對於有關Vaadin的多窗口支持的更多信息,請參閱this wiki page。
我用你提供的方法。但我收到錯誤信息從127.0.0.1收到無效安全密鑰?你知道爲什麼嗎? –
@henriI發現問題。我在一個瀏覽器中打開了相同的應用程序,但是不同的標籤,但是如果我在兩個瀏覽器中打開。它沒有問題。謝謝。 –
@charlesmy問題是我添加了一個closeListener到窗口。 ((WebApplicationContext)getContext())。getHttpSession()。invalidate();以便每次重新加載頁面時,會話都會過期。謝謝 –