Vaadin 8:动态打开和关闭@Push以使用@Push和cookies
在我的应用程序(Vaadin.8.6.3、Tomcat 9和Maven 3)中,我需要设置运行良好的cookies,除非我使用@Push。我只需要@Push来实现一个如上所述的进度窗口 我读到可以使用例如Vaadin 8:动态打开和关闭@Push以使用@Push和cookies,cookies,push,vaadin8,Cookies,Push,Vaadin8,在我的应用程序(Vaadin.8.6.3、Tomcat 9和Maven 3)中,我需要设置运行良好的cookies,除非我使用@Push。我只需要@Push来实现一个如上所述的进度窗口 我读到可以使用例如 getUI().getPushConfiguration().setPushMode(PushMode.AUTOMATIC) 我在代码中尝试了几种方法和位置来打开和关闭@Push,但都没有效果 一个例子: @Push(PushMode.DISABLED) public class MyUI
getUI().getPushConfiguration().setPushMode(PushMode.AUTOMATIC)代码>
我在代码中尝试了几种方法和位置来打开和关闭@Push,但都没有效果
一个例子:
@Push(PushMode.DISABLED)
public class MyUI extends UI {
因为我在代码中有不止一个地方处理cookies,所以我认为最好是在UI类中禁用@Push,并在运行后台线程时打开它
单击按钮,我启动runnable,并在runnable中打开@Push模式:
class Loader implements Runnable {
@Override
public void run() {
try {
getUI().access(() -> {
getUI().getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
getUI().getNavigator().navigateTo("scandataview/" + name);
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
我没有错误,但什么也没有发生,即我想加载的数据永远不会加载,进度窗口永远保持不变
我的问题是:
是否可以在加载长数据时打开@Push以显示进度窗口,并在加载后将其关闭
如果是,我应该在代码中的什么位置打开/关闭@Push
如果你需要更多的信息,请告诉我。我将非常高兴你的帮助。谢谢大家! 如果您只需要在一个地方推一推,并且由于某种原因已经描述了并发症,我推荐以下方法
将推送模式设置为手动,即@push(PushMode.manual)
然后对代码进行如下修改,即手动推送,不依赖自动推送
class Loader implements Runnable {
@Override
public void run() {
try {
getUI().access(() -> {
getUI().getNavigator().navigateTo("scandataview/" + name);
getUI().push();
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
根据此问题中提供的信息,access()
的上述使用可以进一步改进:非常感谢您向我指出getUI问题!我添加了一个ui变量,该变量在构造函数中设置为ui=ui.getCurrent();然后你的代码就成功了。但是,通过设置@Push(PushMode.MANUAL),推送被启用,cookie设置不起作用!现在,我使用的是no-Push注释,然后我可以使用UI.getCurrent().getPushConfiguration().setPushMode(PushMode.MANUAL)打开和关闭推送;或PushMode.DISABLED。因为打开和关闭需要时间,所以我需要实现等待循环(肮脏的解决方法)。如何知道推送模式何时更改?