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 & next 和 skip submit 按钮以转换到下一个状态,因此更新“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 的寺庙,

那是我的两分钱

于 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

这是一个在 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 回答