我想在我的应用程序中添加用户会话支持。因为重新加载页面会重新启动应用程序,甚至打开另一个浏览器选项卡都会导致原来的“不同步”问题。
我是否需要为每次登录创建一个独立的窗口,或者有没有我可以使用的插件,或者如果我让它成为Spring + Vaadin应用程序,它能解决这个问题吗?
发布于 2011-11-22 15:50:32
除非url以?restartApplication=true结尾,否则重新加载页面不会重新启动应用程序。
application对象存储在HTTP会话中,因此您希望每个用户存储的所有内容都可以与应用程序相关联。
通常,每个浏览器进程只能支持一个HTTP会话,因此每个浏览器只能支持一个用户(除非您做出重大努力,并在每个应用程序级别窗口上存储每个用户的状态。我建议您不要这样做,除非您知道自己在做什么:在web应用程序中,每个http会话一个用户是常态)
Spring+Vaadin是一个很好的组合-我在我们的项目中使用这种配对取得了很大的效果-但在这种情况下并不是特别有用。
Vaadin在它的默认配置中不支持多窗口/标签(因此你的不同步错误)。然而,编写这样的代码是很简单的:here's a simple explanation, and some code
发布于 2011-11-22 15:50:45
使用Vaadin框架创建的应用程序是自动statefull的,因此您的应用程序应该保持其状态,除非您在URL中有?restartApplication参数。
要在同一会话中支持多个浏览器选项卡/窗口,必须在应用程序类中覆盖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。
https://stackoverflow.com/questions/8218830
复制相似问题