2011-06-17 39 views

回答

17

無論何時,無論何時,無論何時訪問Web請求,您都可以訪問flash。一般來說,您可以從GrailsWebRequest對象中獲得flash

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

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

如果調用retrieveGrailsWebRequest() web請求的範圍之外,你會得到一個IllegalStateExceptionGrailsWebRequest通過在服務請求中早期執行的過濾器GrailsWebRequestFilter綁定到當前線程。所以基本上,只要你處於請求的上下文中,並且在這個過濾器執行的「內部」,你應該能夠訪問閃存。

除此之外,請看org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes的來源。閃存存儲在會話中,所以理論上你應該可以在訪問會話後使用它。但要小心,因爲它在會話的不同請求中共享。所提到的過濾器負責推進整個請求中的閃存狀態,實質上是從2元素隊列中彈出一個ConcurrentHashMap

5

只要你是你可以訪問閃存範圍要求的範圍內

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

def flashScope = WebUtils.retrieveGrailsWebRequest().flashScope 

(Grails腳本和Quartz作業不在範圍內的一個Grails應用程序的地方例子的要求)