如何支持Vaadin项目的用户会话

时间:2011-11-21 21:33:13

标签: spring session vaadin

我想为我的应用程序添加用户会话支持。由于重新加载页面将重新启动应用程序,甚至打开另一个浏览器选项卡将导致原始页面不同步'问题

我是否需要为每次登录创建一个独立的窗口,或者是否有我可以使用的插件,或者如果我将它设为Spring + Vaadin应用程序,它会解决这个问题吗?

2 个答案:

答案 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