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