延迟后自动关闭Vaadin窗口

时间:2016-08-09 13:33:51

标签: vaadin vaadin7

我想创建自己的消息框类,以便我可以创建不同类型的消息(例如没有按钮)。对于托盘消息,我希望在5秒延迟后自动关闭。

我在网上搜索过:我发现很老的帖子暗示了ProgressIndicator或者其他一些"更新的"带推/轮询/线程的那些(4yo)。我真的很想知道在Vaadin 7.6中是否有一个简洁的解决方案。推/民对我来说理解机制似乎有点太复杂了(初学者......)。

2 个答案:

答案 0 :(得分:3)

<强> TLDR : 要么使用推送/轮询技术,要么需要在GWT中编写全新的组件。选择是你的

要完全理解为什么您需要了解Vaadin或/和Web应用程序的工作原理。让我们举个例子:你想以某种方式告诉浏览器在一段延迟(5秒)后关闭窗口。您可以通过两种不同的方式实现预期效果:

  • 在JavaScript中使用setTimeout
  • 从服务器向浏览器发送消息

Vaadin中的setTimeout :当然,Vaadin中没有这样的方法,因为这个框架使用预编译的GWT组件。因此,您需要在Vaadin addons repo中找到一个组件或编写自己的组件。 GWT不是JavaScript - 这是真的,但您仍然可以将自己的JavaScript文件与任何GWT组件相关联。

从服务器向浏览器发送消息表示基本上是推送/轮询。别无他法。 Vaadin实际上支持两者,所以你唯一需要的就是了解它们。

还有一个黑客,但我不推荐这种方法。通常,您可以使用以下命令在运行时执行纯JavaScript代码:

JavaScript.getCurrent().execute("alert('Hello')");

但是,如果你想这样做,你将很难管理你的弹出窗口,因为Vaadin框架不会指望你关闭他负责的窗口。

答案 1 :(得分:0)

好吧,由于没有人给出正确的答案,你可以使用TimerTimerTask执行类似的操作:

Window wd = new Window("Your autoclosing window");
// do stuff
Timer delayer = new Timer();
retrasador.schedule(new TimerTask(){
    @Override
    public void run() {
        UI.getCurrent().access(new Runnable() {
            @Override
            public void run() {
                wd.close();
            }
        });
    }
}, 10000); // auto closes after 10 s

请注意,在您完成操作后,您可能应该使用它。