Я работал с примером, который нашел, вот ссылка на репозиторий Git:
https://github.com/basakpie/vaadin8-spring-security-sample
Он отлично работает, это как раз то, что мне нужно, за исключением одного: мне нужен Server Push.
Вот что я сделал до сих пор:
- добавлена зависимость Vaadin Push
добавил следующие строки в начало метода MainUI.init():
getPushConfiguration().setTransport(Transport.WEBSOCKET); getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
В класс MainUI добавлены следующие поля:
Label time = new Label(); Timer timer;
В класс MainUI добавлен следующий метод:
private void updateTime() { access(() -> time.setValue(String.format("The server-side time is %s", LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"))))); }
Наконец, в конец метода MainUI.init() добавлено следующее:
timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { updateTime(); } }, 1000L, 1000L);
В основном это работает. Я могу видеть, как текущее системное время обновляется каждую секунду. Но когда я нажимаю «Обновить» в браузере, приложение просто зависает с загрузчиком vaadin. Сообщений об ошибках нет.
Я пробовал следующие альтернативы:
Добавление метода
public void attach() {
getPushConfiguration().setTransport(Transport.WEBSOCKET);
getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
}
и удаление getPushConfiguration
строк из init()
Это решает проблему зависания, но пуш не работает - никаких ошибок, просто время вообще не отображается.
Я также попытался добавить аннотацию @Push
к MainUI
. Это приводит к тому же поведению, что и раньше — зависанию при обновлении.
Как я могу это исправить? Любые предложения будут приветствоваться.