3

我有以下代码:

Button export = new Button("CSV");
export.addListener(new ClickListener() 
{
    public void buttonClick(ClickEvent event) 
    {
        CsvExport csvExport;
        csvExport = new CsvExport(_table);
        csvExport.setDisplayTotals(false);
        csvExport.setDoubleDataFormat("0");
        csvExport.excludeCollapsedColumns();
        csvExport.setReportTitle("Document title");
        csvExport.setExportFileName("Nome_file_example.csv");
        csvExport.export();

        getWindow().showNotification("Document saved", "The document has been exported.");
    }
}

我希望通知仅在文件导出和下载后出现,但实际上通知不起作用,可能是因为它没有“等待”声明

csvExport.export();

完成。如果我评论它,通知就会起作用。

有人有什么建议吗?

非常感谢,

4

1 回答 1

1

您需要将工作拆分为一个单独的线程,然后提供一种“稍后”通知用户的方法。

所以,首先,创建一个线程......如果你在 Java EE 上,使用内置的线程池,否则使用其他东西(我们在 tomcat 上,我们推出了自己的,以便我们更好地控制)。

然后,当你完成后,同步你的线程,回到你的 UI 类(我们使用 Groovy 的闭包,但你可以创建你自己的监听器),并调用该方法来通知你的用户。window.showNotification('All Done')

所以这是棘手的部分,你已经通知了你的用户,但是 Vaadin 已经发回了“点击”响应......所以服务器部分认为它已经通知了用户,但它还不能向用户显示...... . 您的页面上需要一个进度指示器,因为它每 5 秒询问服务器是否有任何更改。

还有一些“推送”插件,但我发现我们正在启动线程的大多数地方,我们想要显示“加载”动画,所以进度指示器效果很好。

于 2012-11-24T07:25:40.340 回答