В Grails доступ к объекту флэш-памяти возможен только из контроллеров и представлений? - PullRequest
11 голосов
/ 18 июня 2011

В Grails flash объект хранения используется для хранения данных перекрестного запроса, таких как сообщения .

Я знаю, что этодоступ к нему возможен из большинства представлений и контроллеров, но я не уверен, доступен ли он универсально через Grails или к нему можно получить доступ только из определенных обычных объектов.

Можно ли получить доступ к объекту flash из Services, например?

Или даже где-нибудь во время прямого веб-запроса?

Каковы точные ограничения с точки зрения доступа?

Ответы [ 2 ]

18 голосов
/ 18 июня 2011

Вы можете получить доступ к 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 элементов.

5 голосов
/ 04 июня 2013

Пока вы находитесь в контексте запроса, вы можете получить доступ к области флеш-памяти с помощью

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

def flashScope = WebUtils.retrieveGrailsWebRequest().flashScope

(сценарии Grails и задания Quartz являются примерами мест в приложении Grails, которые находятся за пределамиконтекст запроса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...