grails范围问题-页面、请求、flash

grails范围问题-页面、请求、flash,grails,Grails,显示以下示例: <g:set var="now" value="${new Date()}" scope="request" /> 并且还指示默认情况下由集合定义的变量是页面范围(页面外、请求、闪存、会话和应用程序选项)。我想知道页面和请求范围之间的区别是什么,以及这种区别的示例用途是什么 此外,对于flash scope,手册指出:“Grails支持flash scope的概念,将其作为属性的临时存储区,这些属性只需用于此请求和下一个请求。之后属性被清除。这对于在重定向之前直

显示以下示例:

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

并且还指示默认情况下由集合定义的变量是页面范围(页面外、请求、闪存、会话和应用程序选项)。我想知道页面和请求范围之间的区别是什么,以及这种区别的示例用途是什么

此外,对于flash scope,手册指出:“Grails支持flash scope的概念,将其作为属性的临时存储区,这些属性只需用于此请求和下一个请求。之后属性被清除。这对于在重定向之前直接设置消息非常有用。”

我并不清楚重定向与“此请求和下一个请求”之间的关系,因为它们给出的重定向示例是从一个控制器操作重定向到另一个控制器操作,这不会在发送到客户端的两个页面/http响应中作出响应

希望这两个问题是有意义的——即页面和请求范围之间的高度差异,以及操作之间的重定向对flash范围有何用处?

A
重定向(控制器:“foo”,操作:“bar”)
等于一个新的请求(至少在servlet的上下文中)。这就是为什么您需要flash成为一种“两个请求范围”,您被发送到的操作将重定向视为一个新请求。您可以使用chain()显式避免这种情况

至于页面范围和请求范围之间的区别,我的理解是,页面范围或多或少是给定视图/呈现过程操作的模型,而请求是针对整个请求周期的。这意味着在操作返回中传递给视图的任何内容(或在
render()的
model:[]
中放入的内容)都是“页面范围”


至于手动示例,我不知道为什么它们会在视图g:set操作中显示任何作用域,通常应该避免在视图中设置变量(分离关注点和所有这些)。

谢谢,这澄清了很多问题。您应该真正了解Servlet规范提供的作用域。这就是grails使用大多数现代web框架现在拥有的附加Flash作用域实现的全部功能。应用程序、会话、请求和页面是规范提供的标准范围。因此,如果您想了解它们,请阅读规范。