2010-07-14 27 views
6

Dalla mia esperienza dell'utilizzo di MVC molla in concomitanza con l'ibernazione, conosco il problema delle eccezioni lazy che si verifica quando si effettua l'indirizzamento alla raccolta lazy-retriever durante il rendering della vista. E 'puro spring + hibernate world risolve introducendo OpenSessionInViewInterceptor o OpenSessionInViewFilter abilitando così una sessione di sospensione per richiesta.Dovrei occuparmi di Open Session in View quando uso Grails?

Quindi la domanda è: dovrei preoccuparmi di questo problema in Grails o tale comportamento di una sessione per richiesta è abilitato per impostazione predefinita.

Se non si tratta di valori predefiniti dei grails, fornire un codice per implementare questo comportamento.

Grazie.

risposta

6

Grails registra una sottoclasse personalizzata di OpenSessionInViewInterceptor (aggiunge la consapevolezza di WebFlow). Quindi qualsiasi cosa fatta nel contesto di una richiesta web avrà una sessione aperta e verranno risolti i riferimenti e le raccolte pigri.

+0

Per uno stato di visualizzazione, quando imposto un'istanza di domini come variabile di PageScope (da taglib) e provo ad accedervi in ​​vista, perché ottengo l'eccezione di inizializzazione Pigro, non è stato possibile inizializzare il proxy senza errori. La sessione non è ancora aperta, perché il tag è in gsp (layout) che viene reso come parte dello stato di visualizzazione. Si può rispondere http://stackoverflow.com/questions/21456784/grails-webflow-error-could-not-initialize-proxy-no-session-when-trying-to-ac –

+1

Non sono sicuro del dettagli, ma questo ha a che fare con Sitemesh e l'ordine di rendering della pagina. Penso che la sessione si chiuda dopo l'esecuzione dell'azione del controller, ma prima che il GSP sia reso. In generale, è meglio passare tutti i dati necessari alla vista per evitare questo e altri problemi. Consentendo che il caricamento lazy avvenga nel GSP, stai facendo richieste di database da un GSP che è una cattiva pratica in generale –

+0

Il problema è che ho bisogno di accedere ad alcuni domini nel layout. Quale sarebbe l'approccio giusto in questo caso? –

Problemi correlati