2011-11-25 19 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