如何在按钮点击中设置Vaadin 8 LoadingIndicator配置
我正在使用Vaadin 8,而LoadingIndicator给我带来了一些问题。在90%的时间内,我需要相应地设置它:
- 第一个延迟==300ms
- 第二个延迟==600ms
- 第三延迟==
Integer.MAX
编辑:目前,我想出的可行的(不是最好的)解决方案是创建一个模仿v-loading-indicator
的CSS类,并创建一个在body
元素的开头添加div
元素的JavaScript方法,然后将这个CSS类添加到div
元素。然后,当创建按钮时,我对这个div
执行addEventListener
(再次使用JS-这很关键),并添加方法以显示加载指示器。
解决方案
通常只有在请求完全处理后才会更新浏览器中的UI。因此,设置按钮被点击前的延迟是有效的,但在点击之后完成时不起作用。要更改这一点,您需要启用推送以立即更新用户界面。尝试使用和不使用推送的以下代码,您应该会看到加载指示器行为的不同。
@Push
public class DemoUI extends UI {
protected void init(VaadinRequest vaadinRequest) {
VerticalLayout layout = new VerticalLayout();
layout.setSizeFull();
Button loadingButton = new Button();
loadingButton.addClickListener(e -> {
getLoadingIndicatorConfiguration().setFirstDelay(0);
getLoadingIndicatorConfiguration().setSecondDelay(1000);
getLoadingIndicatorConfiguration().setThirdDelay(2500);
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
});
layout.addComponent(button);
setContent(layout);
}
}
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = DemoUI.class)
public static class Servlet extends VaadinServlet {
}
相关文章