如何在执行冗长的操作时关闭Vaadin 8确认对话框

时间:2018-06-23 08:07:56

标签: java vaadin8

我有Vaadin 8确认代码,该代码执行长时间的任务。我想关闭对话框并显示进度条:-

        ConfirmDialog.show(UI.getCurrent(), "Dynamic Report warning caption",
                "More than " +rows+ " rows in this table. It will take long time to generate this report.\nDo you still want to continue? ",
                SalkkuTM.getI18N("PortfolioManagementMenuBar.deleteData.confirmDialog.yes.caption"),
                SalkkuTM.getI18N("PortfolioManagementMenuBar.deleteData.confirmDialog.no.caption"), new ConfirmDialog.Listener() {
                    public void onClose(ConfirmDialog dialog) {
                        ProgressBar bar = new ProgressBar();
                        bar.setIndeterminate(true);
                        if (dialog.isConfirmed()) {
                            layout.addComponent(bar);
                            // this method does a long lasting task.
                            dynamicReportParameterGenerator();
                            bar.setVisible(false);
                        }
                    }
                });

enter image description here

我想在用户选择“是”后立即​​关闭此对话框。我想展示一个不确定的进度栏。我无法处理。怎么做?请让我知道我该怎么做?

1 个答案:

答案 0 :(得分:2)

这是常见问题解答,您需要使用Server Push并在后台线程中更新进度栏。这里有一篇博客文章和有关它的视频

https://vaadin.com/blog/community-answer-processing-a-file-in-a-background-thread

这里也对该主题进行了很好的讨论

Update Vaadin Progressbar with push asynchronously

  

我想显示一个不确定的进度栏。

这意味着您可以简化一些事情。如果您不想在操作过程中更新进度条,只需将进度条置于不确定模式下的UI中,完成后就再次更新UI。