与vaadin和spring一起使用的范围是什么?

mem*_*und 5 java session spring vaadin vaadin7

我想用spring开发一个vaadin应用程序.用户应该能够登录并查看特定于用户的页面.我从不同的浏览器窗口访问该站点,如果用户仍然登录则会很方便,因此保留了会话.

现在我想知道为此目的使用哪个范围?Vaadin和Spring提供@Scope("session"),@Scope("ui")@Scope("prototype").我应该将所有*View和*Presenter类放在session范围内吗?

或者将视图注释为更好prototype,以便每次更改页面时都会使用更新的数据重新创建页面?在这种情况下,演示者应该仍然是会话范围,还是prototye?

或者我应该使用boot addon ui提供的范围vaadin4spring?然后,这将为每个新选项卡创建一个新的"uiSession".

@Scope("session")
class MyPresenter {
    //each view should be wired to a presenter
    @Autowired
    private MyView view;
}

@Scope("prototype") //"session", "ui"?
class MyView extends VerticalLayout {
    @PostConstruct
    public void init() {
        addComponent(new Label("time is: " + new Date()));
    }
}
Run Code Online (Sandbox Code Playgroud)

cfr*_*ick 2

vaadin 在会话中存储(大量)状态。状态几乎是客户端在浏览器中可见的任何东西。如果涉及任何组件,则应使用 ui 范围。即使 ui 和 session 看起来相同,您也应该坚持使用 ui 以防止出现竞争条件,甚至更糟糕的是 vaadin 代码。

在上面的示例中,视图绝对是 ui,因为它是一个组件。这使得演示者 ui 也保存了对 ui 作用域组件的引用,并且肯定会利用其中的事件或读取数据等。