7.5.1 Start and End States 2.3.8

See the light - agile, industrial strength, rapid web application development made easy

(Quick Reference) # 7.5.1 Start and End States - Reference Documentation Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari Version: 2.3.8 ## 7.5.1 Start and End States As mentioned before a flow has a defined start and end state. A start state is the state which is entered when a user first initiates a conversation (or flow). The start state of a Grails flow is the first method call that takes a block. For example:
    class BookController {
       …
       def shoppingCartFlow ={
           showCart {
               on("checkout").to "enterPersonalDetails"
               on("continueShopping").to "displayCatalogue"
           }
           …
           displayCatalogue {
               redirect(controller: "catalogue", action: "show")
           }
           displayInvoice()
       }
    }
Here the `showCart` node is the start state of the flow. Since the showCart state doesn't define an action or redirect it is assumed be a view state that, by convention, refers to the view `grails-app/views/book/shoppingCart/showCart.gsp`. Notice that unlike regular controller actions, the views are stored within a directory that matches the name of the flow: `grails-app/views/book/shoppingCart`. The `shoppingCart` flow also has two possible end states. The first is `displayCatalogue` which performs an external redirect to another controller and action, thus exiting the flow. The second is `displayInvoice` which is an end state as it has no events at all and will simply render a view called `grails-app/views/book/shoppingCart/displayInvoice.gsp` whilst ending the flow at the same time. Once a flow has ended it can only be resumed from the start state, in this case `showCart`, and not from any other state. | Quick Reference (hide)