grails manual显示以下示例:
<g:set var="now" value="${new Date()}" scope="request" />
并且还默认指示由集合定义的变量是页面范围(页面外,请求,闪存,会话和应用程序选择)。我想知道页面和请求范围之间的区别是什么,以及差异的示例用法可能是什么。
此外,对于闪存范围,手册指示:“Grails支持闪存范围的概念,作为需要为此请求和下一个请求提供的属性的临时存储。然后清除属性。这是对于在重定向之前直接设置消息很有用。“
我没有立即明白重定向如何与“此请求和下一个请求”相关,因为它们提供的重定向示例是从一个控制器操作重定向到另一个控制器操作,它不响应两页/ http回复发送给客户?
希望这两个问题有意义 - 即页面和请求范围之间的高级别差异,以及操作之间的重定向如何对闪存范围有用?
答案 0 :(得分:3)
redirect(controller: "foo", action:"bar")
等于新请求(至少在servlet的上下文中)。这就是为什么你需要flash作为一种“两个请求范围”,你发送的动作将你的重定向视为一个新的请求。您可以使用chain()来明确地避免这种情况。
至于页面和请求范围之间的区别,我的理解是页面范围或多或少是给定视图/渲染过程操作的模型,而请求是整个请求周期。这意味着,无论您在动作返回中传递给视图的任何内容(或者您放入model: []
的{{1}}中的内容)都是“页面范围”。
至于手动示例,我不知道为什么他们会在视图中显示任何范围g:set操作,通常应该避免在视图中设置变量(关注点和所有爵士乐的分离)。