AjaxでWebflowをgrailsします
-
20-09-2019 - |
質問
AJAXリクエストを使用して、WebFlowの次の状態に移行しようとしています。しかし、それは同じ状態にとどまり、次の状態のGSPを期待している間、その状態の応答としてGSPを返します。
以下はウェブフローコードです。
def gettingStartedAjaxFlow = {
flow1 {
on("next") {
println "flow1"
}.to("flow2")
on("skip").to("flow2")
}
flow2 {
on("next") {
println "flow2"
}.to("flow3")
on("skip").to("flow3")
}
flow3 {
on("next"){
println "flow3"
}.to("finish")
on("skip").to("finish")
finish {
redirect(action:"index")
}
}
}
以下は、私が州の移行のために行っているAjaxコールです。
$.ajax({
type: "POST",
url: "/UN/user/gettingStartedAjax",
success: function(data) {
$("#wizardDiv").html(data);
}
});
各状態(Flow1、Flow2、Flow3)のGSPには、リモートフォームを備えたAAコードフラグメントが含まれ、次に必要なボタンをスキップして次の状態に移行し、結果として「WizardDiv」Divを更新します。以下は、Flow1状態のGSPフラグメントです。
<g:formRemote name="flow1Form" url="[controller:'user', action:'gettingStartedAjax']" update="wizardDiv">
<p>You are in flow 1</p>
<g:submitButton name="next" value="Next Flow" />
<g:submitButton name="skip" value="Skip Flow" />
</g:formRemote>
解決
(Daxonが投稿したように)実行を追跡するだけでなく、ボタンに_eventid_nextと_eventid_skipという名前の名前があることを確認する必要があります。 G:submitbuttonは通常、これを行うのに十分なほど賢いですが、リモートフォームの内側ではないかもしれません。
また、私のWebフローコードは、FlowExecutionKeyではなくパラメーター実行を使用します - どのバージョンのGrailsを使用していますか?
他のヒント
私は同じ問題に固執しています、それをほとんど理解しました、
あなたがする必要があることは、現在の状態を追跡するgrails webflow "_flowexecutionkey"を送り返すことです。
あなたが見たと確信しています これ, 、Googleが見つけた唯一の結果として。
Ajaxリクエストをアクションに送信します。アクションは、テンプレートを入力し、入力タグで送り返します。
<input id="flowExecutionKey" name="_flowExecutionKey" value="${request.flowExecutionKey}" size="100"/>
しかし、あなたが送り返したいデータとともに、JSONのようにマークアップされた寺院を送り返すことができます。
それが私の2セントです
ここでは、少なくとも1つのアクションでGrails 2.5.3で機能するソリューション。ボタンのIDと名前は自動的に変更され、含めるように」eventid「プレフィックスとして、しかし、これはまだ入力パラメーターとして手動で_event_idを追加しない限り、私にとってはうまくいきませんでした。しかし、これが複数の可能なイベントでどのように機能するかはわかりません。
<g:formRemote name="flow1Form" url="[controller:'user', action:'gettingStartedAjax']" update="wizardDiv">
<input type="hidden" id="execution" name="execution" value="${request.flowExecutionKey}"/>
<input type="hidden" id="_eventId" name="_eventId" value="next"/>
<fieldset class="form">
</fieldset>
<fieldset class="buttons">
<g:submitButton name="next" value="Next flow"/>
</fieldset>
</g:formRemote>