Grails 1.1 GSP 流(Flow)的作用域 - 作用域基础

在以前的示例中,你可能会注意到我们在“流作用域(flow scope)”中已经使用了一个特殊的流(flow)来存储对象,在Grails中共有5种不同的作用域可供你使用 :

• request - 仅在当前的请求中存储对象

• flash - 仅在当前和下一请求中存储对象

• flow - 在工作流中存储对象,当流到达结束状态,移出这些对象

• conversation - 在会谈(conversation)中存储对象,包括根工作流和其下的子工作流

• session - 在用户会话(session)中存储对象

Grails的service类可以自动的定位web flow的作用域,详细请参考Services .

此外从一个action中返回的模型映射(model map)将会自动设置成flow范围,比如在一个转换(transition)的操作中,你可以象下面这样使用流(flow)作用域 :enterPersonalDetails { on("submit") { [person:new Person(params)] }.to "enterShipping" on("return").to "showCart" }要知道每一个状态总是创建一个新的请求,因此保存在request作用域中的对象在其随后的视图状态中不再有效,要想在状态之间传递对象,需要使用除了request之外的其他作用域。

此外还有注意,Web流(Flow)将 :

  1. 在状态转换的时候,会将对象从flash作用域移动到request作用域;

  2. 在渲染以前,将会合并flow和conversation作用域的对象到视图模型中(因此你不需要在视图中引用这些对象的时候,再包含一个作用域前缀了).