在选项卡关闭时取消范围@ViewAccessScoped Beans

un-scope @ViewAccessScoped Beans on Tab close

我有一个 JSF 应用程序,其中包含两个 @ViewAccessScoped 个 Bean 和两个 Pages/Views,一个用于搜索的 Bean,有关 Bean 的详细信息。详细信息 Bean 引用 @ViewAccessScoped,因此当我返回搜索时数据可用。没有其他 CDI 参考资料。 WindowRenderMode 为 ClientWindowRenderMode.CLIENTWINDOW,无需进一步配置。

目前为止效果很好。如果我转到另一个页面或注销,则 Beans 将不受范围限制。我遇到的一个问题: 当我在新的浏览器选项卡中打开我的详细信息页面时,会创建两个新的 Bean,这是预期的行为。但是当我关闭选项卡时,豆子仍然在那里。我想服务器在标签页关闭时不会收到通知。

  1. deltaspike 中是否有我可以用来检测的内置解决方案 选项卡是否关闭?
  2. 使用@ViewAccessScoped 的 Bean 是否有超时(除了会话超时)?
  3. 如果没有内置解决方案:我如何以编程方式取消我的 Beans 的范围?最好取消连接到该选项卡的所有 Bean 的范围(=相同的 Window-ID)(我会用 JavaScript 检测自己的关闭并在关闭时调用 Bean-Method)
  1. 否,因为在 JS 中无法捕获 "tab close" 事件。 参见:javascript detect browser close tab/close browser

  2. 它在 CODI 中可用,但未迁移到 DeltaSpike。 参见:https://issues.apache.org/jira/browse/DELTASPIKE-437

  3. 您可以通过 WindowContext API:

    @Inject private org.apache.deltaspike.core.spi.scope.window.WindowContext windowContext;
    
    public void closeIt() {
        windowContext.closeWindow("myWindowId");
    }