2

我有一个带有两个@ViewAccessScopedBean 和两个页面/视图的 JSF 应用程序,一个用于搜索的 Bean,在 Bean 上了解详细信息。详细信息 Bean 引用了 @ViewAccessScoped,因此当我返回搜索时数据可用。没有其他 CDI 参考。WindowRenderMode 是ClientWindowRenderMode.CLIENTWINDOW,无需进一步配置。

到目前为止,这工作得很好。如果我转到另一个页面或注销,Beans 将不受范围限制。我遇到的一个问题:当我在新的浏览器选项卡中打开我的详细信息页面时,会创建两个新的 Bean,这是预期的行为。但是当我关闭选项卡时,Beans 仍然存在。I guess the Server doesn't get notified when a tab get's closed.

  1. deltaspike 中是否有内置解决方案可用于检测选项卡 clsoes?
  2. @ViewAccessScoped 的 Bean 是否有超时(在会话超时旁边)?
  3. 如果没有内置解决方案:如何以编程方式取消 Bean 的范围?最好取消范围连接到该选项卡的所有 Bean(=相同的 Window-ID)(我会使用 JavaScript 检测关闭我自己并在关闭时调用 Bean-Method)
4

1 回答 1

3
  1. 不,因为不可能在 JS 中捕获“标签关闭”事件。请参阅:javascript检测浏览器关闭选项卡/关闭浏览器

  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");
    }
    
于 2016-01-25T12:25:30.213 回答