不分离()方法调用之后attach()方法?(Does detach() method call a

2019-10-20 14:09发布

我有一个简单的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();
}
}

当第一次我的UI被加载,我看到在输出我的控制台

附上!
初始化!

这是OK,这就是我的预期。 但是,当我刷新浏览器,我的控制台输出分别为

附上!
初始化!
分离!

惊人 ! 我想Detach ! 可先产生, 因为我认为),当浏览器被刷新, detach()方法应该调用和attach() init()应当遵循。 但实际上, detach()方法将调用后attach()方法。 有什么不对我的想法?

Answer 1:

浏览器刷新=新UI实例

当您刷新浏览器窗口或选项卡,新的UI被创建的实例。 所以,你看到一个附加一个的消息UI实例。 旧UI实例将在稍后分离。

这是Vaadin 7.你可以改变与注释这种行为的默认行为。

@PreserveOnRefresh

添加@PreserveOnRefresh注释的UI改变行为:没有新的UI实例不会在刷新创建。

引用此注释的文档:

标记当用户刷新浏览器窗口,应保留的UI。 默认情况下,创建一个新的UI实例刷新时,引起了URL或URI片段没有捕获的任何UI状态被丢弃。 通过添加此批注的UI类,在检测到重载时的框架反而会重用当前的UI实例。



文章来源: Does detach() method call after attach() method?