【问题标题】:Vaadin - how to stop waiting for server response?Vaadin - 如何停止等待服务器响应?
【发布时间】:2018-08-02 09:55:09
【问题描述】:

我有带网格的页面。我正在通过服务将数据加载到网格。加载和计算所有数据大约需要 20-40 秒。当我按下按钮获取数据时,页面开始加载(经典的 vaadin 顶部加载指示器开始加载)。

我的问题是,如何停止加载/等待数据?

我无法停止在我从中获取数据的服务器上的搜索过程,它没有此功能,我只能请求数据,然后等待它们。

我应该停止一些线程吗?我应该使用类似 this.getUI 的东西......在这里的某个地方停止它吗?

我正在使用 vaadin 7.7.4

谢谢你:)

【问题讨论】:

    标签: java vaadin vaadin7 vaadin-grid


    【解决方案1】:

    您应该为此使用线程。

    您需要分离您的逻辑,即主线程确实将所有组件添加到 UI。 然后,该线程还需要生成一个新线程来获取数据,然后相应地更新 UI。

    要在从后端获取数据后更新 UI,您需要在 UI 中激活推送。

    不要忘记将线程访问与 UI 同步:

    ui.access(new Runnable() {
        @Override
        public void run() {
            ...grid_update_with_new_data... ;
        }
    });
    

    数据的获取应该在ui.access 方法之外进行,否则你的 UI 将在后端数据加载期间冻结。

    查看这篇文章了解更多技术细节

    Using Thread with Vaadin?https://vaadin.com/docs/v7/framework/advanced/advanced-push.html

    【讨论】:

    • 好的,如果我实现了这个,如何停止等待响应?
    • 请出示您的代码。您需要为长时间运行的部分启动一个新的后台线程
    【解决方案2】:

    @André Schild 这是简化的代码。当我点击搜索按钮时,应用程序开始搜索,没问题。问题是如何在搜索完成之前停止搜索。对我来说,停止等待响应并停止在页面顶部加载栏就足够了,但我不知道如何实现这一点。

    @SpringComponent
    @UIScope
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public class DistraintSearchComponent extends CustomComponent {
    
     @Autowired
     private Service service
     private Button searchButton = new Button("Search");
    
     public void init(){
      searchButton.addClickListener(new ClickListener() {
    
      @Override
      public void buttonClick(ClickEvent event) {
       List<Results> results = service.findByFilter(filter);
       refreshGrid(results);
      }
    
      });
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 2013-10-25
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多