vaadin - Vaadin 在操作期间禁用按钮
问题描述
我怎样才能在 Vaadin 中实现这一点。
// inside myButton click event
myButton.setEnabled(false);
doMyActionThatTakeSomeTime();
myButton.setEnabled(true);
在事件内部,该按钮永远不会被禁用,因为 UI 不会刷新。
在 Vaadin 11(或 10)中执行此操作的最佳实践是什么?
- 强制视图刷新?(如何?)
- 把我的动作放在一个线程里面?(如何 ?)
编辑解决方案 -如何使其与 Thread 一起使用
到目前为止,以 Thread 为例(工作):
@Push
@Route(value = "secured")
public class MainView extends VerticalLayout
[ ... ]
// inside click event
UI ui = UI.getCurrent();
new Thread(() -> {
ui.access(() -> {
goButton.setEnabled(false);
ui.push();
});
doMyActionThatTakeSomeTime();
ui.access(() -> {
goButton.setEnabled(true);
ui.push();
});
}).start();
解决方案
听起来文档中的“异步更新”一章解释了您想要的内容:https ://vaadin.com/docs/v11/flow/advanced/tutorial-push-access.html 。基本上:doMyActionThatTakeSomeTime()
在单独的后台线程中运行,然后在线程完成后重新启用按钮,服务器推送将确保 UI 状态正确更新。
这是一个经常被问到的话题,这里还有另一个答案:如何在执行冗长的操作时关闭 Vaadin 8 确认对话框在 Vaadin 8 和 Vaadin 10+ 中以类似的方式进行异步更新。
推荐阅读
- java - 对字节数组的 ArrayList 进行排序
- .net - 带有单个任务的异步 OnNext
- facebook-graph-api - Facebook Graph API - 实时观看者峰值指标?
- docker - 无法访问使用 docker 工具箱运行的 docker 容器内的 postgres 数据库
- ansible - 在 playbook 中设置密码变量时,Ansible “成为”插件不起作用
- python - 从 .ply 转换为 .pcd 格式
- airflow-scheduler - 气流 | 多天批量调度 URL
- c# - 无法识别查询源
- java - 如何从 Java 中的 POST 响应中提取标头值?
- gnuplot - 调用脚本时未打开 Gnuplot 控制台窗口