2012-03-16 4 views
0

Grailsを学んでいますので、何か基本的なものがないと私を許します。Grails Web Flow - 最初のステップ/状態にマップを渡します。

Grails Web Flowプラグインを使用してウィザード/ Webフローを作成しようとしています。いくつかの変数を描画するためのフローの最初のステップが必要です。私が通常のコントローラについて読んだことは、通常、これらの変数をコントローラからマップを使用してビューに渡すことによって行われます。しかしWebFlowモデルでは、これらの変数をどこで初期化するか、最初のステップに渡す方法はわかりません。私は初期化 "アクション"を作成して、変数をフラッシュスコープに入れて、1つのリダイレクトを通過する必要があることを知っていましたが、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") 
    } 

... 

とサイズをレンダリングする際にNullPointerをスロー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

+0

本質的に同じ別の質問が見つかりました:http:// stackoverflow .com/questions/1002170/grails-web-flow。この質問は終了することができます。 – jlpp

+0

うわー、別のもの:http://stackoverflow.com/questions/7158042/grails-web-flow-first-state – jlpp

答えて

2

は、問題ありません...

フロー初期化子を使用してフローの最初のステップとして動作させ、次にinitFlowsuccessの最初のステップに移動します。

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}" /> 

これはテストされていないですが、それだけで正常に動作する必要があります。お楽しみください:)

+0

マイケルに感謝します。この回答はうまくいくかもしれませんが、より多くの検索を行った後、私はhttp://stackoverflow.com/questions/7158042/grails-web-flow-first-stateと、最初の状態で「アクション」ブロックが必要であることを示唆する他の参考文献。 – jlpp

関連する問題