2011-11-25 57 views
1

grails manual示出以下示例:Grails的範圍的問題 - 頁面,請求,閃速

<g:set var="now" value="${new Date()}" scope="request" /> 

並且還通過由該組定義的默認的變量是頁範圍指示(離開頁面,請求,閃光燈,會話的和應用程序選擇)。我想知道頁面和請求範圍之間的區別是什麼,以及差異的一個示例使用可能是什麼。

另外,在flash範圍中,手冊指出:「Grails支持flash範圍的概念作爲屬性的臨時存儲,這些屬性只需要這個請求和下一個請求,然後清除屬性。在重定向之前直接設置消息很有用。「

對於我來說,重定向與「這個請求和下一個請求」是如何關聯的,因爲他們給出的重定向的例子是從一個控制器動作重定向到另一個控制器動作,它不會以兩頁/ http響應被髮送到客戶端?

希望這兩個問題有意義 - 即頁面和請求範圍之間的高級別差異,以及動作之間的重定向如何對Flash範圍有用?

+1

您應該仔細看看Servlet規範提供的範圍。這就是Grails用現在大多數現代Web框架所具有的額外Flash Scope實現的全部功能。應用程序,會話,請求和頁面是規範提供的標準範圍。所以如果你想了解它們,請閱讀規格。 – Gregg

回答

3

A redirect(controller: "foo", action:"bar")等於一個新請求(至少在servlet的上下文中)。這就是爲什麼你需要將Flash作爲'兩個請求範圍'的一種,你發送的動作將你的重定向作爲一個新的請求。你可以通過使用chain()來明確地避免這種情況。

至於頁面和請求範圍之間的區別,我的理解是頁面範圍或多或少是給定的視圖/渲染過程操作的模型,而請求是針對整個請求循環的。意思是說,無論你在動作返回中傳遞給視圖(或者你放在render()model: []中的東西)是'頁面範圍'。

至於手動例子,我不知道爲什麼他們會在視圖g:set操作中顯示任何範圍,因此通常應避免在視圖中設置變量(關注點和所有爵士樂的分離)。

+0

謝謝,這澄清了很多事情。 – Ray