質問

私はまだGrailsがきれいに新しいもので、オンライン調査を開発しています。私はWebフローを使うことにし、私は多くの問題に遭遇しました。調査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)
.

常に同じエラーです。また、クラス調査はシリアライズ可能な実装を実現しました。私は同じコードを同じコントローラと別のアクションにコピーして貼り付け、それは完璧に機能します。 Webフローとは異なるものへのアイデアは?

役に立ちましたか?

解決

状態定義の直接のコードのようなコードを置くことはできません。アクション状態または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についてのExcelentチュートリアルを書きました。あなたはここでそれを読むことができます:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top