我有以下代码:
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();
完成。如果我评论它,通知会起作用。
有人有什么建议吗?
非常感谢,
最佳答案
您需要将工作拆分到一个单独的线程中,然后提供一种“稍后”通知用户的方法。
所以,首先,创建一个线程...如果你在 Java EE 上,使用内置的线程池,否则使用其他东西(我们在 tomcat 上,我们自己推出,以便我们更好地控制).
然后,当您完成后,同步您的线程,回到您的 UI 类(我们使用 Groovy 中的闭包,但您可以创建自己的监听器),并调用该方法来通知您的用户。 window.showNotification('全部完成')
所以这是棘手的部分,您已经通知了您的用户,但是 Vaadin 已经发回了“点击”响应...所以服务器部分认为它已通知用户,但它无法向用户显示然而......你需要一个progress indicator在您的页面上,因为它每 5 秒询问一次服务器是否有任何更改。
还有一些'push' plugins ,但我发现在我们启动线程的大多数地方,我们都希望显示“加载”动画,因此进度指示器运行良好。
关于vaadin - 使用 Vaadin 完全导出 CSV 文件后显示通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531696/