禁用范围内的@ViewAccessScoped Bean关闭

时间:2016-01-22 11:41:44

标签: deltaspike

我有一个带有两个@ViewAccessScoped Bean和两个页面/视图的JSF-App,一个用于搜索的Bean,用于详细信息。细节Bean引用@ViewAccessScoped,以便在我返回搜索时可用的数据。没有其他CDI参考。 WindowRenderMode为ClientWindowRenderMode.CLIENTWINDOW,无需进一步配置。

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

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

1 个答案:

答案 0 :(得分:2)

  1. 不,因为无法抓住"标签关闭" JS中的事件。 请参阅: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");
    }