другой ответ не совсем правильный, как указано в комментариях (резюме здесь).
Ваадин 7
Этот ответ относится к Vaadin 7.
Vaadin 6 в чем-то отличается.
Сессия продолжается
Как только браузер пользователя достигает вашего приложения Vaadin, создается сеанс сервлета. VaadinSession содержит оболочка этого сеанса сервлета, доступная через VaadinSession.getSession().
Сеанс продолжается до тех пор, пока не истечет время ожидания, вы явно не закроете его, пользователь не закроет приложение браузера или другое подобное завершающее событие. Но пользователь, использующий функцию перезагрузки/обновления, не является таким завершающим событием.
Кнопка перезагрузки/обновления
Пока этот сеанс продолжается, пользователь может щелкнуть/коснуться функции значка перезагрузки/обновления в веб-браузере. По умолчанию это приводит к замене вашего текущего объекта подкласса пользовательского интерфейса новым новым объектом подкласса пользовательского интерфейса.
Для вашего пользователя кажется, что ваше приложение было перезапущено. Но на самом деле ваше приложение было не прервано, а было удалено только содержимое в этом конкретном окне/вкладке браузера. Ваше приложение (ваш VaadinSession) живет.
В вашем приложении могут быть открыты другие окна/вкладки браузера, каждая со своим собственным объектом подкласса пользовательского интерфейса. Эти другие окна/вкладки по-прежнему будут работать с тем же объектом пользовательского интерфейса. Все запущенные экземпляры пользовательского интерфейса привязаны к одному и тому же VaadinSession
.
Сохранять объект пользовательского интерфейса при перезагрузке/обновлении
Вы можете или не хотите, чтобы ваш объект подкласса пользовательского интерфейса удалялся при перезагрузке/обновлении окна/вкладки браузера, в зависимости от характера вашего конкретного приложения.
Вы хотите, чтобы пользователь мог сделать «переделку», чтобы начать заново с нуля? Если это так, сохраните это поведение по умолчанию. Не применяйте аннотацию.
Если вы хотите изменить эффект перезагрузки/обновления браузера, чтобы сохранить объект пользовательского интерфейса и его состояние, примените ссылку PreserveOnRefresh
аннотация. Легко, почти как по волшебству.
Два уровня охвата
В Vaadin 7 вы можете хранить состояние либо на уровне окна/вкладки браузера (UI
) или для всего приложения (на VaadinSession).
Если вы хотите, чтобы некоторые данные сохранились после удаления объекта UI
, сохраните эти данные в VaadinSession, вызывая методы get/setAttribute. Например, вы должны хранить информацию о входе/аутентификации пользователя в VaadinSession.
Чтобы узнать больше об этих двух уровнях области действия, включая важную информацию о безопасности потоков, см. этот другой вопрос, как поместить данные в переменную сеанса и получить данные на другой странице в vaadin?.
Диаграмма
На этой диаграмме показана иерархия сеансов. Верхние три уровня (Servlet Container, ServletContext и HttpSession) являются стандартной технологией сервлетов. Ниже находятся уровни, специфичные для Vaadin.
![диаграмма контейнера сервлетов, контекста и сеанса](https://i.stack.imgur.com/ufjIQ.png)
person
Basil Bourque
schedule
01.09.2014