Как динамически пуш-ап обновлять страницы в vaadin?
У меня есть рабочее приложение с Vaadin
а также Spring (+Security)
, Я сейчас пытаюсь динамически выдвигать обновления клиентских интерфейсов, используя vaadin-push
,
Я хочу создать "представление", одинаковое для всех клиентов. Представление должно получить счетчик, динамически увеличивающийся нажатием. Таким образом, пока клиенты показывают страницу, счетчик обновляется сам (или в моем примере: добавляет на страницу несколько компонентов меток). Каждый клиент должен видеть одно и то же значение.
Но я не вижу изменений на веб-странице. Зачем?
//the static controller the dynamically changes content
@Controller
public class ViewPresenter {
private static int counter = 0;
@Autowired
private void StaticView view;
@Scheduled(fixedRate = 1000)
public void refresh() {
//push the content change periodically to frontend
view.getUI().access(new Runnable() {
@Override
public void run() {
view.addComponent(new Label("refresh: " + counter++);
Sysout("update executed: " + counter); //OK, is printed
}
});
}
}
//the static test component that gets a new label added on every content change
@VaadinComponent
public class StaticView extends CssLayout {
//this is the view that every client should see
}
//the secured admin view
@VaadinView(name = "/secured")
@Scope("ui")
@Secured("user")
public class SecuredView extends VerticalLayout implements View {
@Autowired
private StaticView staticView;
@Override
public void enter(ViewChangeEvent event) {
addComponent(staticView);
}
}
//enable push
@Configuration
@Push
public class AppConfig {
}
@VaadinUI
@PreserveOnRefresh
public class ApplicationUI extends UI {
}
Я вижу изменения на стороне клиента, только если я вручную обновляю веб-страницу. Но сам контент не меняется автоматически.
Может быть @Push
должен быть размещен на UI
учебный класс? Но в этом случае я получу следующую ошибку:
java.lang.IllegalStateException: невозможно приостановить ответ дольше, чем время ожидания сеанса. Увеличьте значение времени ожидания сеанса в файле web.xml по адресу org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:314) в org.atmosphere.cpr.AtmosphereResourceImpl.suspend (AtmosphereResourceImpl.java.29in). At2.server.communication.PushHandler$2.run(PushHandler.java:129) на com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:242) на com.vaadin.server.communication.PushHandler.access$200(PushHandler. Java:55) на com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:73)
1 ответ
Решение на основе https://github.com/peholmst/vaadin4spring/issues/51:
server.sessionTimeout=30
с @Push(transport = Transport.LONG_POLLING)