Flash,它是一個請求的臨時存儲映射。Flash對象映射如何在Grails框架內工作
我想知道,一旦請求巧妙這是怎麼Grails的core framework
特別是我很感興趣的類(ES)負責將請求中的閃圖,然後把它實現出來處理。
Flash,它是一個請求的臨時存儲映射。Flash對象映射如何在Grails框架內工作
我想知道,一旦請求巧妙這是怎麼Grails的core framework
特別是我很感興趣的類(ES)負責將請求中的閃圖,然後把它實現出來處理。
如果打印對象的類:
class MyController {
def index() {
println flash.getClass().name
}
}
你會看到這是org.codehaus.groovy.grails.web.servlet.GrailsFlashScope。如果您查看代碼,則有兩個ConcurrentHashMap:一個用於當前請求,另一個用於下一個請求。
要使其可用,實例將存儲在會話中(請參閱registerWithSessionIfNecessary)。
Flash實際上只是當前請求和下一個請求的臨時存儲映射。它不會保留下一個請求後的條目,除非在下一個請求中重新填充條目(將來會是當前的條目)。下面是它如何工作的Grails的:
FlashScope
接口延伸地圖本身有兩個方法next()
和getNow()
由GrailsFlashScope
實現。所有這些都可以在grails-web-mvc
中找到。
GrailsFlasScope
主要維護兩個併發的HasMap(一個用於當前請求,另一個用於下一個請求)來保存條目。它執行next()
從FlashScope
做清潔和「限制下一個請求」部分爲:
a。清除電流
b。下一步爲當前
c。明確下一步
接下來要關注的事項將是GrailsWebRequestFilter
(執行OncePerRequestFilter
),它確保每次調度總是有一次執行的請求。
所有HTTP servlet請求都被GrailsWebRequestFilter
過濾。該過濾器將閃存範圍設置爲next
,以便每次檢索到最新的有效信息。
現在的問題是FlashScope
如何協調當前和下一個地圖?那麼,這就是爲什麼FlashScope
從Map
延伸。通過確保從next
地圖中檢索值,FlashScope將覆蓋get(key)
的地圖以協調兩個地圖,否則切換到當前地圖。
默認情況下,flash
如何提供給controllers
?所有控制器繼承ControllersApi
,繼承CommonWebApi
。
最後的好感覺:-) –
這個職業是你在找什麼? 'org.codehaus.groovy.grails.web.servlet。GrailsFlashScope' – Alidad
有沒有可以接受的答案? – dmahapatro