Как и когда в JSF уничтожается @ViewScoped bean?

Жизненный цикл управляемых @RequestScoped и @SessionScopedBean управляемых beans управляется самим контейнером Servlet, поскольку они в основном сохраняются как атрибут HttpRequest и HttpSession соответственно. Как JSF управляет жизненным циклом @ViewScopedBean? Я знаю, что он создается, когда представление создается и может использоваться до тех пор, пока не появится обратная передача для другого представления. Но я узнал, что это не сбор мусора сразу после того, как мы перейдем от этой точки зрения.

Ответ 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.