Grails Web Flow - 将地图传递给第一步/状态

时间:2012-03-16 00:39:18

标签: grails

我正在学习Grails,如果我遗漏了一些基本的东西,请原谅我。

我正在尝试使用Grails Web Flow插件创建向导/ Web流。我想要流程的第一步来呈现一些变量。从我读到的关于普通控制器的内容来看,通常可以通过使用映射将这些变量从控制器传递到视图来完成。但是在WebFlow模型中,我不知道在哪里初始化这些变量以及如何将它们传递给第一步。我尝试创建一个初始化“动作”并将变量放入闪存范围,知道它应该通过一个重定向,但它不会在gsp上呈现。

这是怎么做到的?

这是控制器的一个片段,它在控制台中打印“4”:

class ServicesController {

def index() {
    redirect(action: "initialize")
}

def initialize() {
    flash.assessmentTypes = AssessmentType.list()
    println flash.assessmentTypes.size
    redirect(action: "request")
}

def requestFlow = {
    selectAssessments {
        on("next") {
            // capture assessments
        }.to("productInfo")
        on("cancel").to("finish")
    }

...

gsp的一个片段,在渲染大小时会抛出一个nullpointer:

${flash.assessmentTypes.size}
<g:each var="assessmentType" in="${flash.assessmentTypes}">
  <li><g:checkbox name="assessmentType" value="${assessmentType.id}" />${assessmentType.name}</li>
</g:each>

1 个答案:

答案 0 :(得分:2)

没问题......

使用流初始值设定项作为流中的第一步,然后将其移至success initFlow的第一步。

def wizardFlow = {

    initFlow {

      flow.assessmentTypes = AssessmentType.list();  //<-- put them in the flow so you can access it in step1.gsp

    }
    on('success').to('step1') 
    on(Exception).to('handleFlowError')

    step1{
        on('next'){ 
            flow.asessmentType = AssessmentType.get(params.assessmentType.id);
            println("They picked ${flow.asessmentType}.");
        }.to('step2')
        on('exit').to('exit')
    }
    step2{
        on('next'){ /* do stuff */ }.to('finish')
        on('previous').to('step1')
        on('exit').to('exit')
    }

   exit( /* exit flow before finish */ )
   finish( /* finish up */ )
   handleFlowError( */ not good :( */)

}

step1 GSP ....

<g:select name="assessmentType.id" from="${assessmentTypes}" optionKey="id" value="${assessmentType?.id}" />

这是未经测试但它应该可以正常工作。享受:)