Vaadin-如何停止等待服务器响应?

时间:2018-08-02 09:55:09

标签: java vaadin vaadin7 vaadin-grid

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

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

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

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

我正在使用vaadin 7.7.4

谢谢:)

2 个答案:

答案 0 :(得分:2)

您应该为此使用线程。

您将需要分离逻辑,即主线程确实将所有组件添加到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

答案 1 :(得分:0)

@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);
  }

  });
 }
}