Как и когда бин @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 вместо.

Другие вопросы по тегам