首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在操作过程中禁用按钮

在操作过程中禁用按钮
EN

Stack Overflow用户
提问于 2018-09-27 23:31:48
回答 4查看 1.8K关注 0票数 2

我怎么能在Vaadin做到这一点。

代码语言:javascript
复制
// inside myButton click event
myButton.setEnabled(false);
doMyActionThatTakeSomeTime();
myButton.setEnabled(true);

在事件内部,该按钮从未被禁用,因为UI没有刷新。

在Vaadin 11 (或10)中这样做的最佳实践是什么?

  • 强制视图刷新?(如何?)
  • 把我的动作放进线里?(如何?)

编辑解决方案-如何使其与线程一起工作

到目前为止,使用线程的示例(工作):

代码语言:javascript
复制
@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();
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-28 05:22:05

听起来像是文档中的“异步更新”一章解释了您想要的内容:https://vaadin.com/docs/v11/flow/advanced/tutorial-push-access.html。基本上:在单独的后台线程中运行doMyActionThatTakeSomeTime(),然后在线程完成后重新启用按钮,服务器推送将确保UI状态被正确更新。

这是经常被问到的话题,这里还有另一个答案:How to dismiss Vaadin 8 confirmation dialog while performing lengthy operation在Vaadin 8中执行异步更新,而Vaadin 10+以类似的方式工作。

票数 4
EN

Stack Overflow用户

发布于 2018-09-28 05:30:27

在Vaadin 8中,有一个精确的Button::setDisableOnClick()方法。

这可能也应该在新版本中重新引入。

票数 2
EN

Stack Overflow用户

发布于 2019-04-09 21:31:03

对我来说,最简单的方法是:

代码语言:javascript
复制
    Button btnAction = new Button("Action");
    btnAction.setDisableOnClick(true);
    btnAction.addClickListener(e -> {
        try {
            for (int i = 0; i < 900000; i++) {
                System.out.println(i);
            }
        } finally {
            btnAction.setEnabled(true);
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52546381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档