如上所述,一个流(Flow)定义了开始和结束状态。一个开始状态是当用户第一次开始一个会话(或流(Flow))。
Grails的开始流(Flow)是第一个带有代码块的方法调用。
例如:class BookController {
…
def shoppingCartFlow = {
showCart {
on("checkout").to "enterPersonalDetails"
on("continueShopping").to "displayCatalogue"
}
…
displayCatalogue {
redirect(controller:"catalogue", action:"show")
}
displayInvoice()
}
}
这里,showCart节点是这个流的开始状态。
因为这个showCart状态并没有定义一个操作(action)或重定向,只被视为是一个视图状态。
通过规约,指向grailsapp/views/book/shoppingCart/showCart.gsp视图 .
注意,这不像正规的控制器(controller)操作(action),这个视图被存储于与其流名字匹配的grails-app/views/book/shoppingCart目录中 .
shoppingCart流(Flow)也可能拥有两个结束状态。第一个是displayCatalogue,执行外部重定向到另一个控制器(controller)和操作(action),从而结束流(Flow)。
第二个是displayInvoice是一个最终状态,因为它根本没有任何事件,只是简单的渲染一个名为grails-app/views/book/shoppingCart/displayInvoice.gsp的视图,并在同一时间终止流(Flow).
一旦一个流(Flow)结束,它只能从开始状态重新开始,对于showCart不会来自任何其他状态.