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