Grails 1.1 GSP Web流(Flow) - 操作(Action)状态和视图状态 操作(Acti

操作(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)作用域"的相互作用.