我有一个简单的UI类
public class HelloWorldUI extends UI {
@Override
protected void init(VaadinRequest request) {
System.out.println("Initialized !");
final VerticalLayout layout = new VerticalLayout();
layout.addComponent(new Label("Hello World !"));
setContent(layout);
}
@Override
public void detach() {
System.out.println("Detach !");
super.detach();
}
@Override
public void attach() {
System.out.println("Attach !");
super.attach();
}
}
Run Code Online (Sandbox Code Playgroud)
第一次加载UI时,我在控制台看到输出为
附上!
初始化了!
没关系,这就是我的预期.但是当我刷新浏览器时,我的控制台输出是
附上!
初始化了!
分离!
惊人 !我认为Detach !可能首先产生,因为(我认为)浏览器刷新时,detach()方法应该调用attach(),init()应该遵循.但实际上detach()方法会在attach()方法之后调用.我的想法有什么不对?
UI实例刷新浏览器窗口或选项卡时,UI会创建一个新实例.因此,您会看到新 UI实例的附加消息.旧UI实例稍后将分离.
这是Vaadin 7中的默认行为.您可以使用注释更改该行为.
将@PreserveOnRefresh注释添加到UI更改行为:UI刷新时不会创建新实例.
引用此注释的文档:
标记用户刷新浏览器窗口时应保留的UI.默认情况下,刷新时会创建一个新的UI实例,导致未在URL或URI片段中捕获的任何UI状态被丢弃.通过将此批注添加到UI类,框架将在检测到重新加载时重用当前UI实例.
| 归档时间: |
|
| 查看次数: |
1362 次 |
| 最近记录: |