操作(Action)状态只执行代码但不渲染任何视图。
操作(Action)的结果被用于控制流(Flow)的切换。
为了创建一个操作操作(Action)状态,你需要定义一个被用于执行的操作。
这通过调用action方法实现并传递它的一个代码块来执行:listBooks {
action {
[ bookList:Book.list() ]
}
on("success").to "showCatalogue"
on(Exception).to "handleError"
}
正如你看到的,一个操作看上去非常类似于一个控制器(controller)操作(action),实际上,假如你需要可以重用控制器(controller)操作(action)。
假如这个操作没有错误成功返回,success事件将被触发。
在这里,返回一个map,它被视为"model"看待,并自动放置于流(flow)作用域.
此外,在上面的示例中也使用了下面的异常处理程序来处理错误:on(Exception).to "handleError"
这使当流(Flow)切换到状态出现异常的情况下调用handleError.
你可以编写与流(flow)请求上下文相互作用更复杂的操作(action):processPurchaseOrder {
action {
def a = flow.address
def p = flow.person
def pd = flow.paymentDetails
def cartItems = flow.cartItems
flow.clear()
def o = new Order(person:p, shippingAddress:a, paymentDetails:pd)
o.invoiceNumber = new Random().nextInt(9999999)
cartItems.each { o.addToItems(it) }
o.save()
[order:o]
}
on("error").to "confirmPurchase"
on(Exception).to "confirmPurchase"
on("success").to "displayInvoice"
}
这是一个更复杂的操作(action),用于收集所有来自流(flow)作用域信息,并创建一个Order对象。
然后,把Order作为模型返回。
这里值得注意的重要事情是与请求上下文和 "流(flow)作用域"的相互作用.