【问题标题】:auto closing Vaadin window after delay延迟后自动关闭 Vaadin 窗口
【发布时间】:2016-08-09 13:33:50
【问题描述】:

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

我在互联网上搜索过:我发现非常旧的帖子建议 ProgressIndicator 或一些“较新”的帖子 (4yo) 与推送/轮询/线程。我真的想知道在 Vaadin 7.6 中是否有一个简洁的解决方案。推送/投票对我来说似乎有点太复杂了,无法理解其中的机制(初学者......)。

【问题讨论】:

  • 您的意思是NotificationPopupView 之类的吗?
  • 要么使用推送/轮询技术,要么需要在 GWT 中编写全新的组件。选择权在你。
  • ok @kukis 这似乎是答案:除了推送/投票之外没有其他选择。

标签: vaadin vaadin7


【解决方案1】:

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

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

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

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

从服务器向浏览器发送消息基本上意味着推送/轮询。没有别的办法。 Vaadin 实际上支持两者,所以您唯一需要做的就是了解它们。

还有一个 hack,但我不推荐这种方法。一般来说,你可以在运行时执行纯 JavaScript 代码:

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

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

【讨论】:

  • 感谢@kukis 的进一步解释!所以我会学习我猜的推送/投票。它可能对其他事情有用。也。 JS hack 是我绝对不想使用的东西。
  • 如果你觉得有用的话,在stackoverflow上点赞、接受和回答也是一个很好的做法。
【解决方案2】:

好吧,因为没有人给出正确的答案,你可以用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

请注意,在您使用完 Timer 后,您可能应该妥善保管它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多