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.