Grails 2.0.4 webflow“类型不匹配”异常
-
11-12-2019 - |
题
我对 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)
总是同样的错误。另外,我确保类 Survey 实现了 Serialized。我已使用相同的控制器将相同的代码复制并粘贴到不同的操作中,并且它运行完美。对于网络流程有什么不同有什么想法吗?
解决方案
您不能将这样的代码直接放在状态定义中,您需要使用操作状态或 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
改为阻止:
def beginTestFlow = {
onStart {
flow.survey = Survey.get(params.id)
}
showSurvey{
on("cancel").to "cancelSurvey"
// ...
其他提示
ivo houbrechts写了一个关于grails 2.0 webflow的卓越教程。你可以在这里阅读:
不隶属于 StackOverflow