我想为我的应用程序添加用户会话支持。由于重新加载页面将重新启动应用程序,甚至打开另一个浏览器选项卡将导致原始页面不同步'问题
我是否需要为每次登录创建一个独立的窗口,或者是否有我可以使用的插件,或者如果我将它设为Spring + Vaadin应用程序,它会解决这个问题吗?
答案 0 :(得分:5)
使用Vaadin Framework创建的应用程序是自动状态的,因此除非您在URL中有?restartApplication参数,否则应用程序应保持其状态。
要在同一会话中支持多个浏览器选项卡/窗口,必须在Application类中覆盖getWindow(String name),以便为每个浏览器选项卡/窗口返回一个新的Window实例:
@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。
答案 1 :(得分:4)
重新加载页面不重新启动应用程序,除非您的网址以?restartApplication=true
结尾。
Application对象存储在HTTP Session中,因此每个用户要存储的所有内容都可以与应用程序关联。
通常,每个浏览器进程只能支持一个HTTP会话,因此您每个浏览器只能支持一个用户(除非您付出了巨大努力,并在每个应用程序级别窗口上存储每个用户的状态。我建议您不要#39; t除非你知道自己在做什么,否则这样做:每个http-session一个用户是Web应用程序的常态)
Spring + Vaadin是一个很好的组合 - 我在这个项目中使用这种配对效果很好 - 但在这种情况下并不是特别有用。
Vaadin不支持其中的多窗口/标签的默认配置(因此您的不同步错误)。但是,编写代码是很简单的:here's a simple explanation, and some code