2013-03-07 11 views
13

Cykl życia @RequestScoped i @SessionScopedBeanzarządzanych fasoli z zarządzanych przez samego pojemnika Servlet, ponieważ są one w zasadzie przechowywane jako atrybut HttpRequest i HttpSession odpowiednio. W jaki sposób JSF zarządza cyklem życia urządzenia @ViewScopedBean? Wiem, że jest tworzony, gdy widok jest tworzony i można go używać do czasu odświeżenia widoku do innego widoku. Ale dowiedziałem się, że to nie śmieci są zbierane natychmiast po tym, jak przenosimy się z tego widoku.Jak i kiedy fasola @ViewScoped została zniszczona w JSF?

+0

Gdy zarządzana metoda działania fasoli zwróci poprawny wynik sprawy nawigacyjnej, nawet jeśli jest w tym samym widoku, obszar zarządzany z widokiem zostanie ograniczony i odtworzony. Przeczytaj ten http://balusc.blogspot.co.il/2011/09/communication-in-jsf-20.html i tutaj zapisano: http://stackoverflow.com/a/9177769/617373 – Daniel

+0

Cóż, w rzeczywistości, nie powinieneś być w stanie przewidzieć gc, czy to się stanie od razu? Ale jeśli chodzi o widok fasoli w mojarra, zobacz http://stackoverflow.com/a/13097208/1530938 – kolossus

+0

garbage collection is asynchronous. kiedy zasięg widzenia jest "zniszczony", jest tak naprawdę "oznaczony jako gotowy do zbierania śmieci", tak jak wszystkie inne obiekty java. Uwaga: znak jest rzeczywiście liczbą odniesienia wynoszącą 0 (tj. Oznaczoną "nie jest już używana"). – DwB

Odpowiedz

23

Będzie on zniszczony podczas

  • odświeżenie strony z nieprzestrzegania null wynik jest prowadzone prawidłowo,

  • lub liczba (logicznych) widoków w sesji został przekroczony, a zwłaszcza widok jest pierwszym w łańcuchu LRU (w Mojarrze, który można konfigurować za pomocą parametrów kontekstowych com.sun.faces.numberOfViewsInSession i com.sun.faces.numberOfLogicalViews, z których każdy ma domyślną wartość 15),

  • lub nu Domyślnie przekroczono zakres działania w sesji (w Mojarrze, to zakodowany limit 25), zobacz także JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?

  • lub sesja wygasła.

To będzie zatem nie zostać zniszczone, gdy strona jest rozładowywane w wyniku kliknięcia łącza GET do innej strony lub odświeżyć stronę lub zamykając kartę/okno przeglądarki. Fasola będzie żyła tak długo, aż spełniony zostanie jeden z wyżej wymienionych warunków. Aby go zniszczyć mimo rozładowania, rozważ użycie zamiast tego opcji OmniFaces @ViewScoped.

+0

co masz na myśli przez LRU? Ostatnio użyto? a także co masz na myśli przez * widoki logiczne *? – Geek

+2

1) Tak. Są przechowywane na mapie LRU, uporządkowanej według ostatniego użycia. Najmniej wykorzystywany jest pierwszy wpis. 2) Patrz: http://stackoverflow.com/questions/12562469/how-can-i-set-the-view-timeout/12564632#12564632 – BalusC

+0

@BalusC, czy są jakieś rozwiązania, które przyspieszają wyświetlanie fasoli z widokami? będzie ominilował widoki z komentarzem? –

Powiązane problemy