【问题标题】:Grails 2.0.4 webflow "type mismatch" exceptionGrails 2.0.4 webflow“类型不匹配”异常
【发布时间】:2012-07-24 15:52:06
【问题描述】:

我对 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 实现了 Serializable。我已经将相同的代码复制并粘贴到具有相同控制器的不同操作中,并且它可以完美运行。对 Web 流程有何不同的任何想法?

【问题讨论】:

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


    【解决方案1】:

    您不能将这样的代码直接放在状态定义中,您需要使用操作状态或onEntry

    def beginTestFlow = {
        showSurvey{
            onEntry {
                flow.survey = Survey.get(params.id)
            }
            on("cancel").to "cancelSurvey"
            on("continueSurvey").to "nextQuestion"
        }
    
        cancelSurvey { redirect(controller:"surveyPage") }
    }
    

    每次进入showSurvey 状态时都会触发onEntry 块。相反,如果您希望某些逻辑在整个流程开始时只运行一次(例如,如果稍后的转换可能重新进入初始状态),您可以使用流程级别的 onStart 块来代替:

    def beginTestFlow = {
        onStart {
            flow.survey = Survey.get(params.id)
        }
        showSurvey{
            on("cancel").to "cancelSurvey"
            // ...
    

    【讨论】:

    • 是的,效果很好。我很惊讶我的参考资料都没有提到 onStart 方法。感谢您的帮助!
    • 文档中似乎没有提到它,我最初是通过 jira.grails.org/browse/GRAILS-3997 的组合和阅读 Grails 源代码的相关位发现的...
    【解决方案2】:

    Ivo Houbrechts 写了一篇关于 grails 2.0 webflow 的优秀教程。你可以在这里阅读:

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

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 2017-05-06
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2012-09-02
      • 2013-08-25
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多