未调用 Vaadin Web 应用程序中的分离事件
Detach event in Vaadin web app not getting called
我的问题源于一个与这里几乎相同的问题(最终没有得到满意的答案):
https://vaadin.com/forum/thread/13932610
像这个人一样,我希望在关闭打开我的应用程序的浏览器时,会触发分离事件;然而,这并没有发生。我试过添加分离侦听器,覆盖分离方法,并同时执行这两项操作,但其中 none 成功了。至于我怎么知道分离事件没有被调用,我的分离事件是一个简单的打印语句——它没有出现在输出中。
请注意,就像在上述线程中一样,我已经设置了心跳间隔(在我的例子中为 2 秒)并将 closeIdelSessions 设置为 true。所以,我以为我只需要等待六秒钟,但事实并非如此。
当我尝试这个(找到下面代码的基本部分)时,detach() 最终被调用。我 运行 使用 Jetty,我没有触及它的默认设置。关闭浏览器后大约需要 45 分钟,当我看到 "Detach called" 登录控制台时。所以是的,时间很长。原因是最后一个 UI 只有在 HttpSession 过期后才会被清理(这取决于应用程序容器等设置)。如果你想更快地进行强制清理,你需要使用https://vaadin.com/directory/component/cleanupservlet-add-on
@Push
@SuppressWarnings("serial")
public class DemoUI extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = DemoUI.class, heartbeatInterval=5, closeIdleSessions=true)
public static class Servlet extends VaadinServlet {
}
@Override
public void detach() {
System.out.println("Detach called");
}
@Override
protected void init(VaadinRequest vaadinRequest) {
...
}
我的问题源于一个与这里几乎相同的问题(最终没有得到满意的答案):
https://vaadin.com/forum/thread/13932610
像这个人一样,我希望在关闭打开我的应用程序的浏览器时,会触发分离事件;然而,这并没有发生。我试过添加分离侦听器,覆盖分离方法,并同时执行这两项操作,但其中 none 成功了。至于我怎么知道分离事件没有被调用,我的分离事件是一个简单的打印语句——它没有出现在输出中。
请注意,就像在上述线程中一样,我已经设置了心跳间隔(在我的例子中为 2 秒)并将 closeIdelSessions 设置为 true。所以,我以为我只需要等待六秒钟,但事实并非如此。
当我尝试这个(找到下面代码的基本部分)时,detach() 最终被调用。我 运行 使用 Jetty,我没有触及它的默认设置。关闭浏览器后大约需要 45 分钟,当我看到 "Detach called" 登录控制台时。所以是的,时间很长。原因是最后一个 UI 只有在 HttpSession 过期后才会被清理(这取决于应用程序容器等设置)。如果你想更快地进行强制清理,你需要使用https://vaadin.com/directory/component/cleanupservlet-add-on
@Push
@SuppressWarnings("serial")
public class DemoUI extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = DemoUI.class, heartbeatInterval=5, closeIdleSessions=true)
public static class Servlet extends VaadinServlet {
}
@Override
public void detach() {
System.out.println("Detach called");
}
@Override
protected void init(VaadinRequest vaadinRequest) {
...
}