2011-06-17 10 views
9

W Grails flash storage object służy do przechowywania na cross request data like messages.Czy w Grails można uzyskać dostęp do obiektu pamięci flash tylko ze sterowników i widoków?

Wiem, że można uzyskać do niego dostęp z większości widoków i kontrolerów, ale nie jestem pewien, czy jest dostępny powszechnie w Graalach, czy też można uzyskać do niego dostęp tylko z pewnych konwencjonalnych obiektów.

Czy można uzyskać dostęp do obiektu flash z Services?

A może nawet w dowolnym miejscu podczas transmisji na żywo?

Jakie są jej precyzyjne ograniczenia w zakresie dostępu?

Odpowiedz

17

Możesz uzyskać dostęp do flash w dowolnym miejscu i, co ważniejsze, za każdym razem, gdy masz dostęp do żądania internetowego. Ogólnie rzecz biorąc, można uzyskać obiekt flash z obiektu .

import org.codehaus.groovy.grails.web.util.WebUtils 

def grailsWebRequest = WebUtils.retrieveGrailsWebRequest() 
// request is the HttpServletRequest 
def flash = grailsWebRequest.attributes.getFlashScope(request) 

Jeśli powołać retrieveGrailsWebRequest() poza kontekstem wniosek internetowej, dostaniesz IllegalStateException. Numer GrailsWebRequest jest powiązany z bieżącym wątkiem filtrem, GrailsWebRequestFilter, który jest wykonywany na początku żądania usługi. Zasadniczo, dopóki jesteś w kontekście żądania i "wewnątrz" tego działania filtra, powinieneś mieć dostęp do lampy błyskowej.

Poza tym spójrz na źródło dla org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes. Pamięć flash jest zapisywana w sesji, więc teoretycznie powinieneś być w stanie jej użyć, gdy uzyskasz dostęp do sesji. Bądź jednak ostrożny, ponieważ jest on dzielony między różne żądania sesji. Wymieniony filtr jest odpowiedzialny za przyspieszenie stanu pamięci flash podczas żądań, w zasadzie pojawienie się ConcurrentHashMap z 2-elementowej kolejki.

5

Dopóki jesteś w kontekście wniosku można uzyskać dostęp zakres błysku z

import org.codehaus.groovy.grails.web.util.WebUtils 

def flashScope = WebUtils.retrieveGrailsWebRequest().flashScope 

(skrypty Grails i praca kwarcowe są przykłady miejsc w aplikacji Grails, które nie są w kontekście żądania)

Powiązane problemy