Как и когда бин @ViewScoped уничтожается в JSF?
Жизненный цикл @RequestScoped
а также @SessionScopedBean
управляемые bean- компоненты управляются самим контейнером Servlet, поскольку они в основном хранятся как атрибут HttpRequest
а также HttpSession
соответственно. Как JSF управляет жизненным циклом @ViewScopedBean
? Я знаю, что он создается при создании представления и может использоваться до обратной передачи в другое представление. Но я обнаружил, что мусор не собирается сразу после того, как мы переходим от этого взгляда.
1 ответ
Это будет уничтожено, когда
постбэк с не
null
результат выполнен,или число (логических) представлений в сеансе превышено, и конкретное представление является первым в цепочке LRU (в Мохарре это настраивается с помощью
com.sun.faces.numberOfViewsInSession
а такжеcom.sun.faces.numberOfLogicalViews
параметры контекста, каждый со значением по умолчанию 15),или превышено число активных областей просмотра в сеансе (в Mojarra это жестко заданный предел 25), см. также JSF 2.2 Потребление памяти: почему Mojarra сохраняет в памяти объекты ViewScoped Bean последних 25 представлений?
или сеанс истек.
Таким образом, он не будет уничтожен, когда страница будет выгружена в результате нажатия на ссылку GET для другой страницы, или обновления страницы, или закрытия вкладки / окна браузера. Боб будет жить до тех пор, пока не будет выполнено одно из перечисленных выше условий. В любом случае, чтобы уничтожить его во время разгрузки, рассмотрите возможность использования OmniFaces@ViewScoped
вместо.