I have the following code:
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.");
}
}
I would like the notification to appear only after the file has been exported and downloaded, but actually the notification is not working, maybe because it does not “wait” for the statement
csvExport.export();
to finish. If I comment it, the notification works.
Does anybody have any suggestions?
Thanks very much,
You’ll need to split the work into a separate thread, then provide a way to notify the user ‘later’.
So, first, create a thread… if you’re on Java EE, use the built-in thread pooling, otherwise use something else (we’re on tomcat, we rolled our own, to allow us better control).
Then, when you’re done, synchronize your thread, work your way back into your UI class (We use closures from Groovy, but you can make your own listener), and call the method to notify your user.
window.showNotification('All Done')So here’s the tricky part, you’ve notified your user, but Vaadin has already sent the ‘click’ response back… so the Server part thinks it’s notified the user, but it isn’t able to show the user yet… You’ll need a progress indicator on your page, as it asks the server every 5 seconds if anything has changed.
There are also some ‘push’ plugins, but I’ve found that most of the places that we we’re spinning up threads, we want to show a ‘loading’ animation, so the progress indicator works well.