Grails 2.0.4 webflow“类型不匹配”异常

时间:2012-07-26 05:25:49

标签: exception grails parameters spring-webflow type-mismatch

我还是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。我已经使用相同的控制器将相同的代码复制并粘贴到不同的操作中,并且它可以完美地工作。任何与网络流程不同的想法?

2 个答案:

答案 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的优秀教程。你可以在这里阅读:

http://livesnippets.cloudfoundry.com/docs/guide/