我的页面带有网格。我正在通过服务将数据加载到网格。加载和计算所有数据大约需要20-40秒。当我按按钮获取数据时,页面开始加载(vaadin顶部加载指示器中的经典按钮开始加载)。
我的问题是,如何停止加载/等待数据?
我无法停止正在从中获取数据的服务器上的搜索过程,它没有此功能,我只能请求数据,然后等待它们。
我应该停止一些线程吗?我应该使用类似this.getUI ...的东西在这里停止它吗?
我正在使用vaadin 7.7.4
谢谢:)
答案 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);
}
});
}
}