Grails 2.0.4 WebFlow "Type Mismatch"の例外
-
11-12-2019 - |
質問
私はまだ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チュートリアルを書きました。あなたはここでそれを読むことができます:
所属していません StackOverflow