Grails Webflow:在操作或转换状态之外访问流范围

Grails Webflow:在操作或转换状态之外访问流范围,grails,spring-webflow,Grails,Spring Webflow,我想调用控制器未知的子流。它在参数中传递给beginFlow,我将其保存在flow scope中。在goToForm中,我想调用使用保存在flow.theController中的控制器 正如用户列表中所讨论的,这似乎不可能直接实现,因为在构建流结构时(在应用程序启动时),必须知道子流名称。但由于流定义DSL是Groovy代码,您可以执行以下操作: beginPage { on('next').to('selectSubflow') } selectSubflow { actio

我想调用控制器未知的子流。它在参数中传递给beginFlow,我将其保存在flow scope中。在goToForm中,我想调用使用保存在flow.theController中的控制器



正如用户列表中所讨论的,这似乎不可能直接实现,因为在构建流结构时(在应用程序启动时),必须知道子流名称。但由于流定义DSL是Groovy代码,您可以执行以下操作:

beginPage {
    on('next').to('selectSubflow')
}
selectSubflow {
    action {
        return "subflow_${flow.theController}"()
    }
    for(subController in listOfControllers) {
        on("subflow_${subController}").to("subflow_${subController}")
    }
}
for(subController in listOfControllers) {
    "subflow_${subController}" {
        subflow(controller:subController, action:'start')
        on('done').to('showResults')
        on('notDone').to('beginPage')
    }
}
ListofController可以是某个地方的静态控件,也可以在流定义的顶部执行类似的操作

def beginFlow = {
    def listOfControllers = grailsApplication.controllerClasses.findAll {
        it.flows.containsKey('start')
    }.collect { it.logicalPropertyName }
    enter {
        // ...
枚举应用程序中定义startFlow的所有控制器。在类中可能需要一个
def grailsApplication
,我总是忘记Grails中哪些地方默认可用,哪些地方不可用

def beginFlow = {
    def listOfControllers = grailsApplication.controllerClasses.findAll {
        it.flows.containsKey('start')
    }.collect { it.logicalPropertyName }
    enter {
        // ...