2016-11-22 1 views
0

Я добавляю Vaadin в существующее приложение Spring. Я добавил пользовательский интерфейс, сетку и пару других компонентов.Когда я подключаюсь к своему приложению Vaadin из 2 вкладок, я получаю: «Ошибка. Этот экземпляр пользовательского интерфейса уже инициализирован»

Я заметил, что когда я загружаю первый раз, когда он работает нормально, но если подключить другую страницу браузера или перезагрузки, чем я получаю сообщение об ошибке:

«ошибка»: «Внутренняя ошибка сервера», «исключение»: «com.vaadin.server.ServiceException», «message»: «java.lang.IllegalStateException: этот экземпляр пользовательского интерфейса уже инициализирован (как идентификатор интерфейса пользователя 0) и поэтому не может быть снова инициализирован (в качестве идентификатора интерфейса 2). вы случайно не используете старый экземпляр UI ».

Я не был уверен, как зарегистрировать свой пользовательский интерфейс весной, так что я создал @Bean метода в файле конфигурации Spring Java моего приложения:

@Bean 
    MainUI ui() { 
     MainUI ui = new MainUI (mainController()); 
     return ui; 
    } 

Я подозреваю, что проблема в том, что существует один экземпляр этого компонента? не могли бы вы объяснить, как это можно исправить?

ответ

1

В вашем примере вы создаете элемент singleton MainUI, который используется всеми пользователями приложения. Обычно экземпляр UI представляет собой вкладку браузера, и для каждой активной вкладки для каждого пользователя должен быть свой собственный экземпляр UI.

Если вы хотите использовать Vaadin with Spring, вы должны использовать аддон Vaadin Spring или Vaadin Spring Boot.

+0

В примерах, вы предоставляете ссылки на, это, кажется, полагаться на ComponentScan аннотацию или что-то подобное , Я не могу это использовать. Есть ли более явный способ указать Spring, что это класс @SpringUI? – Charbel

0

Ответ на выше, используя ниже класса XxxUI (с аннотацией @SpringUI):

@Bean 
@Scope("prototype") 
Смежные вопросы