Vaadin 在服务器端处理完成之前,客户端不会发生任何更改

Vaadin 在服务器端处理完成之前,客户端不会发生任何更改,vaadin,Vaadin,我正在编辑一个大型vaadin web应用程序的一个上载页面,其中的基本要求是上载一个文件并保存其内容。当它是一个小文件时,没有用户体验问题,但对于有一百万行(当前生产平均数)的大文件,如果没有至少任何文本(如“处理…请稍候”),用户体验是非常糟糕的。刚刚使用了按钮。设置禁用单击“保存按钮”中的,但这还不够。用户将不知道发生了什么,是否有任何错误,是否应该取消等等 这是方法代码段(方法saveFile的相关部分):- 这并不是不恰当的称呼:- btnSave.addListener(ne

我正在编辑一个大型vaadin web应用程序的一个上载页面,其中的基本要求是上载一个文件并保存其内容。当它是一个小文件时,没有用户体验问题,但对于有一百万行(当前生产平均数)的大文件,如果没有至少任何文本(如“处理…请稍候”),用户体验是非常糟糕的。刚刚使用了
按钮。设置禁用单击“保存按钮”中的
,但这还不够。用户将不知道发生了什么,是否有任何错误,是否应该取消等等

这是方法代码段(方法saveFile的相关部分):-

这并不是不恰当的称呼:-

    btnSave.addListener(new ClickListener() {
        
        @Override
        public void buttonClick(ClickEvent event) {
            saveFile();
        }
    });
问题是
progressmsg.setVisible(true)
rows.saveContent()之后反映在浏览器上,它在大文件中插入1M行

无论我做什么,我都无法在插入开始之前看到标签。 我甚至尝试添加一个50x50小窗口和一个消息,但行为是一样的,窗口在处理后出现。
在谷歌上搜索了一段时间后,我无法理解这一点。欢迎提出任何概念/建议。谢谢

当您执行较长的后台处理任务时,最好在单独的线程上处理这些任务,以避免阻塞主线程。然后,您可以使用WebSocket连接,并在后端任务完成时异步更新UI。以下是一些相关文件。本视频还介绍了当您有长时间运行的后台任务时,如何使用Vaadin构建PerformantUI的一些好方法


基本上,您要做的是在一个单独的线程中进行处理,然后在处理完成后使用
ui.access()
更新ui。您需要使用
@Push
从服务器更新UI,而无需激活请求。

您好,谢谢您的回答,解决了我的部分问题。但我的应用程序使用的是vaadin 6.8.4。可以在上面实现推送吗?仅为一种需求升级可能不会被批准,希望您理解。推送不是Vaadin 6中的一项功能,它是在Vaadin 7.x mid life中引入的。不过,Vaadin 6还有一些附加组件可以提供某种推送解决方案,例如,最新版本的框架中的推送功能要好得多。请注意,Vaadin 6.8.4甚至不是最新的Vaadin 6系列,我建议升级到最新版本。另外请注意,Vaadin 6不再维护,因此没有新的版本来修复bug或任何东西。谢谢@TatuLund,我使用了Vaadin 7,根据发布的答案,它工作得非常好
    btnSave.addListener(new ClickListener() {
        
        @Override
        public void buttonClick(ClickEvent event) {
            saveFile();
        }
    });