Vaadin 8: динамически включать и выключать @Push для использования @Push с файлами cookie - PullRequest
0 голосов
/ 17 января 2019

В моем приложении (Vaadin.8.6.3, Tomcat 9 и Maven 3) мне нужно установить файлы cookie, которые хорошо работают, если я не использую @Push.Мне нужно @Push только для одного окна прогресса, реализованного, как описано здесь .

Я читал, что можно включать и выключать @Push, например,

getUI().getPushConfiguration().setPushMode(PushMode.AUTOMATIC);

Я пробовал несколько способов и мест в коде, чтобы включить @Pushи выключен, но ничего не работает.

Один пример:

 @Push(PushMode.DISABLED)
public class MyUI extends UI {

Поскольку в коде есть несколько мест, где я выполняю обработку файлов cookie, я подумал, что лучше всего отключить @Pushв классе пользовательского интерфейса и включите его, когда я запускаю фоновый поток.

Нажатием кнопки я запускаю исполняемый файл, а в запускаемом я включаю режим @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 toпоказать окно прогресса при загрузке длинных данных и выключить его после загрузки?

Если да, где в коде я должен включать / выключать @Push?

Если вам нужна дополнительная информация, пожалуйста,дай мне знать.Я был бы очень рад за вашу помощь.Спасибо!

1 Ответ

0 голосов
/ 17 января 2019

Если вам нужен 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() может быть улучшено в соответствии с информацией, предоставленной в этом вопросе: Метод доступа из текущего пользовательского интерфейса в Vaadin

...