Grails WebFlow DRY分支逻辑

Grails WebFlow noob在这里……

我的WebFlow中的一个状态接收两个需要触发相同操作的事件,然后如果该操作成功则转换到单独的状态.我的初步尝试重复了actionState中的代码.不好.因此,经过一些反复试验后,我想出了以下内容.

    state0 {
        on("event1") {
             flash.stateAfterNext = "state1"
        }.to "actionState"

        on("event2") {
            flash.stateAfterNext = "state2"
        }.to "actionState"
    }

    actionState {
        action {
            flow.unit = Unit.get(params.unit)
            success()
        }
        on("success").to { flash.stateAfterNext }
        on(Exception).to "home"
    }

    state1 { ... }

    state2 { ... }

这有效,但Grails的做法是否很好?有没有更好的方法来处理这样的流分支逻辑?特别是,我应该在这里使用一个子流,如果是这样,那会是什么样子?

注意:我试图将actionState中的代码移动到一个单独的方法中,但因为它引用的流程不起作用.

最佳答案 怎么样的

flow{    
    state0 {
        on("event1") {
            saveUnit(flow,params.unit)
        }.to "state1"    
        on("event2") {
            saveUnit(flow,params.unit)
        }.to "state2"
    }
    state1{...}
    state2{...}

}

private saveUnit(flow, unit){
    flow.unit = Unit.get(unit)
}
点赞