You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 14:除SessionDestroyListener外为指定会话添加销毁动作

解决Vaadin 14.8.14中指定会话销毁时执行专属动作的问题

你之前的问题根源在于把会话销毁监听器注册到了全局共享的VaadinService上——所有会话共用同一个Service实例,因此每个会话注册的监听器都会在任意会话销毁时被触发,最终导致列表中所有关联元素被批量移除。

针对单个会话绑定销毁动作,正确的做法是直接给目标VaadinSession添加销毁监听器,而非Service级别:

ui.getSession().addDestroyListener(evt -> {
    list.remove(this);
});

这个监听器只会在当前ui.getSession()对应的会话销毁时触发,仅移除该会话关联的元素,不会影响其他活跃会话的内容。

另外,如果你使用了CDI或Spring的会话作用域Bean,还可以通过作用域Bean的销毁回调实现类似逻辑:

  • 对于CDI:给会话作用域Bean添加@PreDestroy注解的方法,在方法内执行清理逻辑
  • 对于Spring:在会话作用域Bean中实现DisposableBean接口,或者使用@PreDestroy注解

但最直接匹配你需求的还是VaadinSession.addDestroyListener,它能精准绑定到指定会话,确保动作仅在目标会话销毁时执行。

内容的提问来源于stack exchange,提问作者Miłosz Bąbliński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:45:37