首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何支持用户会话到Vaadin项目

如何支持用户会话到Vaadin项目
EN

Stack Overflow用户
提问于 2011-11-22 05:33:13
回答 2查看 7K关注 0票数 1

我想在我的应用程序中添加用户会话支持。因为重新加载页面会重新启动应用程序,甚至打开另一个浏览器选项卡都会导致原来的“不同步”问题。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 4
EN

Stack Overflow用户

发布于 2011-11-22 15:50:45

使用Vaadin框架创建的应用程序是自动statefull的,因此您的应用程序应该保持其状态,除非您在URL中有?restartApplication参数。

要在同一会话中支持多个浏览器选项卡/窗口,必须在应用程序类中覆盖getWindow(字符串名称),以便为每个浏览器选项卡/窗口返回一个新的窗口实例:

代码语言:javascript
运行
复制
@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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8218830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档