Puede obtener acceso al flash
donde sea, y más importante, siempre que tenga acceso a una solicitud web. En general, puede obtener el flash
del objeto GrailsWebRequest
.
import org.codehaus.groovy.grails.web.util.WebUtils
def grailsWebRequest = WebUtils.retrieveGrailsWebRequest()
// request is the HttpServletRequest
def flash = grailsWebRequest.attributes.getFlashScope(request)
Si se invoca retrieveGrailsWebRequest()
fuera del contexto de una petición web, obtendrá un IllegalStateException
. El GrailsWebRequest
está vinculado al subproceso actual por un filtro, GrailsWebRequestFilter
, que se ejecuta al principio de la solicitud de servicio. Entonces, básicamente, mientras esté en el contexto de una solicitud y "dentro" de la ejecución de este filtro, debería poder acceder al flash.
Más allá de eso, eche un vistazo a la fuente de org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes
. El almacenamiento flash se guarda en la sesión, por lo que teóricamente deberías poder utilizarlo una vez que tengas acceso a la sesión. Tenga cuidado, ya que se comparte entre las diferentes solicitudes de la sesión. El filtro mencionado es responsable de avanzar el estado del flash a lo largo de las solicitudes, esencialmente mostrando un ConcurrentHashMap
desde una cola de 2 elementos.