Attualmente sto imparando su JSF 2.0 e sono così felice dell'esistenza di questa funzione dell'ambito di conversazione, che è molto utile per aprire una nuova scheda o una nuova finestra sul stessa pagina e con risorse separate, non sovrascrive l'una con l'altra.JSF CDI: best practice per scope scope [s]
Ma sono curioso su come implementarlo in modo corretto, su quando iniziare la conversazione e quando chiuderla.
Nel mio caso, ho ogni bean CDI per ogni pagina JSF. E diciamo che ho un menu, e quando viene cliccato, questo porterà alla pagina A, e da A, potrebbe portare a B, B potrebbe portare a C, C potrebbe portare a D, tutte queste 4 pagine sono collegate in una catena.
L'accesso alle proprietà del bean di A dai bean B o C o D è possibile, l'accesso alle proprietà di B è possibile anche dai bean C o D e così via.
ora Im molto confuso su:
- se tutti questi B A C D dovrebbe essere portata conversazione o no, o forse solo A? Perché penso che a volte da un'altra pagina che è al di fuori della catena ABCD, come una pagina F, potrebbe navigare alla pagina B, anche se non so come fornire i dati al bean B ancora.
- se tutti questi ABCD dovrebbero essere combinati in un unico chicco
- dove e quando iniziare il conversazione, im pensando al costruttore , ma io non penso che sia una buona idea , perché preferisco partire la conversazione occasione del primo accesso pagina, non il fagiolo
- dove e quando interrompere la conversazione, in modo che non ci sarà risorse inutilizzate in giro
Per favore condividi le tue considerazioni al riguardo.
CDI non fa parte del JSF standard.CDI è l'acronimo di Contexts and Dependency Injection (JSR-299) che copre le annotazioni del pacchetto 'javax.enterprise'. Anche Conversation Scope non fa parte del JSF standard. È stata un'invenzione di JBoss Seam durante l'età di JSF 1.2 ed è stata adottata dalle specifiche JSF 2.0 come View Scope, modificabile con l'annotazione '@ ViewScoped'. Ora, di cosa stai parlando? – BalusC
Ciao BalusC, grazie per i chiarimenti. Ho usato il termine CDI solo per chiarire cosa sto usando, ma forse quell'informazione non è correlata alla mia domanda, le mie scuse :) Per quanto ne so, il @ViewScoped è per una singola pagina che viene nuovamente visualizzata e le proprietà saranno persisteva. Ma quello che volevo ottenere dall'ambito della conversazione è che posso aprire la stessa pagina su più schede, con ogni scheda come se avesse il proprio ambito di sessione. Quindi, inviando il valore 'albert' su myBean.name su una scheda, non sovrascrivere myBean.name su altre schede. Ma sono confuso su dove iniziare e terminare la conversazione. – bertie
E questo mi confonde di più se ci sono 4 pagine, per esempio, la pagina A è una pagina di navigazione, dove l'utente può cercare, la pagina B è la pagina di dettaglio, dove l'utente può modificare i dettagli, la pagina C è dove l'utente può modificare sub dettaglio e così via. Se volessi essere in grado di aprire la pagina A in diverse schede senza che ne influenzasse un'altra, devo usare l'ambito della conversazione sul bean di A. Ma suppongo che sarà lo scopo della conversazione anche per B C e D? Inoltre su dove e quando dovrei iniziare/terminare la conversazione. Voglio dire, l'utente può aprire nuove schede e chiudere le schede. Come posso rilevare questo e chiudere la conversazione? – bertie