2012-03-16 26 views
0

我在學習Grails,所以如果我缺少一些基本的東西,請原諒我。Grails Web Flow - 將地圖傳遞給第一步/狀態

我正在嘗試使用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的剪斷,會拋出呈現大小時,空指針:

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

類似的問題在這裏問:http://grails.1312388.n4.nabble.com/web-flow-view-state-td1380749.html – jlpp 2012-03-16 00:50:09

+0

發現另一個問題,基本上是相同的:http:// stackoverflow .COM /問題/ 1002170/Grails的,網絡的流程。這個問題可以關閉。 – jlpp 2012-03-16 01:19:33

+0

哇,另一個:http://stackoverflow.com/questions/7158042/grails-web-flow-first-state – jlpp 2012-03-16 01:24:21

回答

2

沒問題...

使用流程初始化程序作爲流程中的第一步,然後將其移動到的success的第一步。

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 :(*/) 

} 

第一步GSP ....

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

這是未經測試,但它應該工作得很好。享受:)

+0

謝謝邁克爾。這個答案可能會工作,但更多的搜索後,我發現http://stackoverflow.com/questions/7158042/grails-web-flow-first-state和一些其他參考建議在第一個狀態需要一個「行動」塊。 – jlpp 2012-03-17 12:37:45