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

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

1 ответов


Он будет уничтожен, когда

  • postback с не -null результат операции

  • или количество (логических) представлений в сеансе превысило, и конкретное представление является первым в цепочке LRU (в Mojarra, это настраивается com.sun.faces.numberOfViewsInSession и com.sun.faces.numberOfLogicalViews параметры контекста, каждый со значением по умолчанию 15),

  • или количество областей просмотра actieve в сеансе превысило (в Mojarra, это жестко закодированный предел 25), см. Также потребление памяти JSF 2.2: почему Mojarra сохраняет в памяти бобы ViewScoped последних 25 представлений?

  • или время сессии истекло.

таким образом не уничтожается при выгрузке страницы в результате нажатия ссылки GET на другую страницу, обновления страницы или закрытия вкладки/окна браузера. Боб будет жить до тех пор, пока один из поставленных выше условий. Чтобы уничтожить его во время разгрузки, подумайте об использовании OmniFaces @ViewScoped вместо.