Сохранение приложения в vaadin

Мне было интересно, как сохранить приложение, когда пользователь полностью покидает приложение, переходя на другой сайт (например, когда пользователь входит в приложение, затем переходит на nytimes.com, а затем возвращается в приложение, некоторые компоненты пропадают). Чтобы сохранить приложение при обновлении, вы можете использовать аннотацию @PreserveOnRefresh, но это не сохранит приложение, когда вы его покинете. Верхний колонтитул, меню и нижний колонтитул исчезают. Эти три компонента имеют свой собственный класс и объявлены только в основном пользовательском интерфейсе. Каждое представление (или страница) имеет свой собственный класс (который находится между меню и нижним колонтитулом). Все работает нормально, пока пользователь не покинет веб-страницу и не вернет верхний колонтитул, меню и нижний колонтитул. Итак, мой вопрос: как сохранить мое приложение vaadin, когда пользователь покидает его и возвращается?


person abden003    schedule 31.07.2013    source источник


Ответы (3)


Ну, может быть проблема с сериализацией и десериализацией из сессии. Убедитесь, что вы реализовали интерфейс Serialization для своих классов.

Вы пробовали repaint отсутствующие компоненты? Они должны быть установлены на setImmediate(false) во время repaintRequest.

Во всяком случае, обычное приложение Vaadin работает без проблем после возврата с другого URL-адреса. Удачи.

person Milan Baran    schedule 22.08.2013
comment
Можете ли вы расширить или дать мне ссылки на сериализацию? Кроме того, приложение может работать так, что панель меню, панель заголовка и нижний колонтитул находятся в отдельных классах. Когда пользователь входит в систему, вызываются три команды для создания каждой из них. Единственная часть, которая меняется на моем сайте, — это раздел между панелью меню и нижним колонтитулом (около 10 различных представлений). Когда я покидаю страницу и возвращаюсь, все, кроме центральной части, исчезает. Спасибо - person abden003; 22.08.2013
comment
В вашем журнале вообще нет ошибок? Странно, что они просто исчезают. Не могли бы вы рассказать больше о своей реализации, а также о том, какой у вас веб-контейнер? - person Milan Baran; 26.08.2013

Чтобы решить эту ситуацию, вы можете добавить прослушиватель в навигатор, который получит uri на страницу, на которую вы переходите, и проверит ваши разрешения. Если у вас нет разрешения, вы останетесь на той же странице и получите уведомление о том, что вам не разрешено заходить на эту страницу. Если они разрешены, вы продолжите направлять их на эту страницу.

person abden003    schedule 29.08.2013

Какие компоненты отсутствуют, когда вы возвращаетесь к приложению? Приложение Vaadin живет столько же, сколько и веб-сессия. Если я зайду на nytimes.com, а затем вернусь до окончания веб-сеанса, приложение Vaadin сохранится (если оно имеет @PreserveOnRefresh) или будет обновлено.

person michaldo    schedule 02.08.2013
comment
Верхний колонтитул, меню и нижний колонтитул исчезают. Эти три компонента имеют свой собственный класс и объявлены только в основном пользовательском интерфейсе. Каждое представление (или страница) имеет свой собственный класс (который находится между меню и нижним колонтитулом). Все работает нормально до тех пор, пока пользователь не покинет веб-страницу и не вернется, а верхний колонтитул, меню и нижний колонтитул исчезнут. - person abden003; 02.08.2013
comment
Я добавил свой основной интерфейс к вопросу - person abden003; 06.08.2013
comment
Боюсь, без полного кода я не смогу вам помочь. Но: вы имеете в виду, что вы работаете с приложением, в какой-то момент вы открываете страницу www.google.com, затем вы нажимаете кнопку браузера назад, и заголовок исчезает. Что произойдет, если вы вместо перехода на страницу Google нажмете кнопку перезагрузки браузера? - person michaldo; 07.08.2013
comment
Да, когда я нажимаю «Назад» после посещения другой веб-страницы, заголовок исчезает, но когда я нажимаю «Обновить», содержимое не изменяется из-за аннотации @PreserveOnRefresh. - person abden003; 07.08.2013
comment
Насколько мне известно, это невозможно. Вы должны поделиться своим приложением или частью с дефектом, чтобы продолжить. - person michaldo; 07.08.2013