我还是Grails的新手,我正在开发一个在线调查。我决定使用网络流程,我遇到了很多问题。我正在尝试将调查ID从gsp页面传递给流控制器。这对任何其他控制器操作都完全正常,但每当我对流的开始状态执行操作时,我总是得到相同的错误。我已经按照教科书中的教程执行了相同的方式,并且我已经没有想法了。
这是gsp页面的链接:
<g:link controller="surveyPage" action="beginTest" id="${survey.id}">
${survey.surveyName}
</g:link>
这是具有开始状态的流程
def beginTestFlow = {
showSurvey{
def survey = Survey.get(params.id)
on("cancel").to "cancelSurvey"
on("continueSurvey").to "nextQuestion"
}
cancelSurvey { redirect(controller:"surveyPage") }
}
它总是抛出异常:
使用行参数类型不匹配
def survey = Survey.get(params.id)
我也试过了:
flow.survey = Survey.get(params.id)
甚至:
flow.survey = Survey.get(session.survey.id)
总是一样的错误。此外,我确保课程调查实现了Serializable。我已经使用相同的控制器将相同的代码复制并粘贴到不同的操作中,并且它可以完美地工作。任何与网络流程不同的想法?
答案 0 :(得分:0)
您不能将类似的代码直接放在状态定义中,您需要使用操作状态或onEntry
块
def beginTestFlow = {
showSurvey{
onEntry {
flow.survey = Survey.get(params.id)
}
on("cancel").to "cancelSurvey"
on("continueSurvey").to "nextQuestion"
}
cancelSurvey { redirect(controller:"surveyPage") }
}
每次输入onEntry
状态时,showSurvey
块都会触发。相反,如果您希望在整个流程开始时只运行一次逻辑(例如,如果某些后续转换可能会重新进入初始状态),则可以使用流级onStart
块:< / p>
def beginTestFlow = {
onStart {
flow.survey = Survey.get(params.id)
}
showSurvey{
on("cancel").to "cancelSurvey"
// ...
答案 1 :(得分:0)
Ivo Houbrechts写了一篇关于grails 2.0 webflow的优秀教程。你可以在这里阅读: