2

Ajax リクエストを使用して WebFlow の次の状態に移行しようとしています。しかし、それは同じ状態にとどまり、次の状態の GSP を期待している間、その状態の応答として GSP を返します。

以下は、WebFlow コードです。

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 には、remoteForm と required next を含むコード フラグメントが含まれており、送信ボタンをスキップして次の状態に遷移し、結果として "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>
4

3 に答える 3

3

私は同じ問題で立ち往生しています、ほとんどそれを理解しました、

あなたがする必要があるのは、現在の状態を追跡する Grails Webflow "_flowExecutionKey" を送り返すことです。

Google が見つけた唯一のまともな結果なので、これを見たことがあると思います。

アクションに ajax リクエストを送信すると、テンプレートが作成され、入力タグが付けられて返されます。

 <input id="flowExecutionKey" name="_flowExecutionKey" value="${request.flowExecutionKey}" size="100"/>

ただし、「_flowExecutionKey」を使用して、JSON のようにマークアップされたテンプルを、送り返したいデータとともに送り返すことができます。

それは私の2セントです

于 2010-01-12T18:49:29.047 に答える
2

(Daxon が投稿したように) 実行を追跡するだけでなく、ボタンの名前が _eventId_next および _eventId_skip であることを確認する必要があります。g:submitbutton は通常、これを行うのに十分賢いですが、remoteForm 内にない場合があります。

また、私の Web フロー コードは、flowExecutionKey ではなく、パラメータ実行を使用しています - どのバージョンの Grails を使用していますか?

于 2010-01-12T21:58:38.170 に答える
0

ここでは、少なくとも 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>
于 2016-06-15T11:23:07.223 に答える