2012-11-23 38 views
3

我有以下代碼:顯示通知已經完全出口與Vaadin

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(); 

要完成。如果我對它發表評論,則通知有效。

有沒有人有任何建議?

非常感謝,

回答

1

你需要的工作拆分成一個獨立的線程,然後提供一種方式來通知用戶「後」。

因此,首先,創建一個線程...如果你在Java EE中,使用內置的線程池,否則使用其他的東西(我們在Tomcat上,我們推出我們自己,讓我們更好控制)。

然後,當你完成時,同步你的線程,回到你的UI類(我們使用Groovy中的閉包,但你可以創建你自己的偵聽器),並調用方法來通知你的用戶。 window.showNotification('All Done')

所以這裏有一個棘手的部分,你已經通知你的用戶,但Vaadin已經發送'點擊'響應......所以服務器部分認爲它已通知用戶,但它無法顯示用戶還......你需要你的頁面上progress indicator,因爲它要求服務器每5秒如果說有什麼改變。

也有一些'push' plugins,但我發現大部分我們正在旋轉線程的地方,我們想要顯示一個'加載'動畫,所以進度指示器效果很好。

+0

非常感謝您的回答!希望它對其他人也有用。 – user1823280