2013-03-07 20 views
13

Il ciclo di vita dei @RequestScoped e @SessionScopedBeanfagioli gestite gestite dal contenitore servlet stessa poiché sono fondamentalmente memorizzati rispettivamente come attributo di HttpRequest e HttpSession. In che modo JSF gestisce il ciclo di vita di @ViewScopedBean? So che viene creato quando la vista viene creata ed è utilizzabile fino a quando c'è un postback a una vista diversa. Ma ho scoperto che non è la garbage collection subito dopo il passaggio da quella vista.Come e quando un bean @ViewScoped viene distrutto in JSF?

+0

Una volta che un metodo di azione bean gestito restituisce un esito caso di navigazione valido, anche se si tratta della stessa vista, il bean gestito con ambito di visualizzazione verrà garbato e ricreato. Leggi questo http://balusc.blogspot.co.il/2011/09/communication-in-jsf-20.html e questo è il posto dove sono stati archiviati: http://stackoverflow.com/a/9177769/617373 – Daniel

+0

Bene, in realtà, non dovresti essere in grado di prevedere gc o farlo accadere immediatamente, vero? Tuttavia, per quanto riguarda i bean viewcoper di mojarra, consultare http://stackoverflow.com/a/13097208/1530938 – kolossus

+0

La garbage collection è asincrona. quando l'ambito della vista è "distrutto", in realtà è solo "contrassegnato pronto per essere raccolto dalla spazzatura", proprio come tutti gli altri oggetti java. Nota: la marcatura è in realtà un conteggio di riferimento di 0 (cioè contrassegnato come "non più utilizzato"). – DwB

risposta

23

Sarà distrutta quando è stata eseguita

  • un postback con un non null risultato,

  • o il numero di visualizzazioni (logici) in seduta ha superato e la vista particolare è il primo nella catena LRU (in Mojarra, configurabile dai parametri di contesto com.sun.faces.numberOfViewsInSession e com.sun.faces.numberOfLogicalViews, ciascuno con un valore predefinito di 15),

  • oppure, il nu mber of agtieve view scope in session ha superato (in Mojarra, questo è un limite hardcoded di 25), vedere anche JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?

  • oppure, la sessione è scaduta.

Sarà così non essere distrutta quando la pagina viene scaricato come risultato di clic su un collegamento GET ad un'altra pagina, o aggiornare la pagina, o la chiusura della scheda/finestra del browser. Il fagiolo vivrà fino a quando non verrà soddisfatta una delle condizioni sospese. Per distruggerlo comunque durante lo scaricamento, prendere in considerazione l'utilizzo di OmniFaces @ViewScoped.

+0

cosa intendi per LRU? e anche cosa intendi per le viste * logiche *? – Geek

+2

1) Sì. Sono memorizzati in una mappa LRU, ordinati per ultimo utilizzo. Il meno usato è il primo ingresso. 2) Vedi http://stackoverflow.com/questions/12562469/how-can-i-set-the-view-timeout/12564632#12564632 – BalusC

+0

@BalusC, ci sono soluzioni per i bean a pila di immagini destory più veloce? sarà ominfaces l'annotazione con viste commentate? –