Вы можете получить доступ к flash
везде и, что более важно, всякий раз, когда у вас есть доступ к веб-запросу. В общем, вы можете получить flash
от объекта GrailsWebRequest
.
import org.codehaus.groovy.grails.web.util.WebUtils
def grailsWebRequest = WebUtils.retrieveGrailsWebRequest()
// request is the HttpServletRequest
def flash = grailsWebRequest.attributes.getFlashScope(request)
Если вы вызовете retrieveGrailsWebRequest()
вне контекста веб-запроса, вы получите IllegalStateException
. GrailsWebRequest
связан с текущим потоком фильтром GrailsWebRequestFilter
, который выполняется в начале запроса на обслуживание. Таким образом, в основном, пока вы находитесь в контексте запроса и «внутри» выполнения этого фильтра, вы должны иметь доступ к флэш-памяти.
Помимо этого, посмотрите на источник для org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes
. Флэш-память сохраняется в сеансе, поэтому теоретически вы сможете использовать ее после получения доступа к сеансу. Будьте осторожны, так как он разделяется между различными запросами на сеанс. Упомянутый фильтр отвечает за продвижение состояния флэш-памяти в запросах, по существу извлекая ConcurrentHashMap
из очереди из 2 элементов.