Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin中布局(或组件)的生命周期?_Java_Layout_Vaadin_Lifecycle_Vaadin7 - Fatal编程技术网

Java Vaadin中布局(或组件)的生命周期?

Java Vaadin中布局(或组件)的生命周期?,java,layout,vaadin,lifecycle,vaadin7,Java,Layout,Vaadin,Lifecycle,Vaadin7,在Vaadin 7中,布局或组件的生命周期中有哪些挂钩 生命周期事件? 我想知道一个布局什么时候开始(出生)和停止(死亡)。具体来说,我怀疑我真的在乎“附加”和“分离”。布局可以在屏幕上使用之前存在于屏幕外,甚至在屏幕上使用之后,如果我以后在用户的工作会话中重新显示该布局的话。我认为附件是加入/离开显示的UI的过程,但我不确定 动机:通知,以观察者模式 这并不重要,但我关心生命周期的原因显示在。如图所示,我想通知一群用户的布局(在UI中),关于他们的小部件所表示的数据的变化。因此,每个布局都需要

在Vaadin 7中,布局或组件的生命周期中有哪些挂钩

生命周期事件? 我想知道一个布局什么时候开始(出生)和停止(死亡)。具体来说,我怀疑我真的在乎“附加”和“分离”。布局可以在屏幕上使用之前存在于屏幕外,甚至在屏幕上使用之后,如果我以后在用户的工作会话中重新显示该布局的话。我认为附件是加入/离开显示的UI的过程,但我不确定

动机:通知,以观察者模式 这并不重要,但我关心生命周期的原因显示在。如图所示,我想通知一群用户的布局(在UI中),关于他们的小部件所表示的数据的变化。因此,每个布局都需要调用一个方法,以使它们使用新数据更新其小部件

要通知每个布局,我需要知道存在哪些布局实例,并且对此类更新感兴趣。所以我保存了一个布局的集合,这些布局会自动注册。基本上,这是一个很好的例子。该推送页面显示了这样一个注册表集合

缺少的部分:在布局的代码中,我在哪里注册和取消注册布局实例?我想我可以使用Java构造函数和
完成
方法。但我怀疑我真的希望注册围绕附加和分离事件展开

附加/分离事件
该文档列出了许多附加/分离侦听器和
attach
/
detach
方法。如果有的话,我不确定应该使用哪一种。你的假设是正确的。当组件获得父集合时,它将附加到UI(通常是会话)。因此,该组件与客户机相关(但它现在可能在客户机中不可见)

处理此问题的一种方法是重写和/或
detach()
,以启动逻辑来注册/取消注册

或者通过添加附加和分离的侦听器:for


实际上,它是否像覆盖
附加
分离
那样简单?另外,如果我没有对布局进行子类化,是否有办法作为附件/分离事件的侦听器订阅?我确实在文档中看到了一些这样的方法,但它们把我弄糊涂了。@BasilBourque我在答案中添加了关于听众的部分
    def layout = new VerticalLayout()
    layout.addAttachListener(new ClientConnector.AttachListener() {
        @Override
        void attach(ClientConnector.AttachEvent attachEvent) {
            println "Attach: $attachEvent"
        }
    })
    layout.addDetachListener(new ClientConnector.DetachListener() {
        @Override
        void detach(ClientConnector.DetachEvent detachEvent) {
            println "Detach: $detachEvent"
        }
    })