我正在学习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>
答案 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}" />
这是未经测试但它应该可以正常工作。享受:)