Grails WebFlow с Ajax - PullRequest
       21

Grails WebFlow с Ajax

2 голосов
/ 12 января 2010

Я пытаюсь перейти к следующему состоянию WebFlow с помощью запросов Ajax. Но он остается в том же состоянии и возвращает 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);
            }
});

GSP для каждого состояния (flow1, flow2, flow3) содержит фрагмент кода, имеющий remoteForm и требующий next и кнопки пропуска отправки для перехода в следующее состояние и в результате обновления div "wizardDiv". Ниже приведен фрагмент GSP для состояния flow1:

<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>

Ответы [ 3 ]

3 голосов
/ 12 января 2010

Я застрял на той же проблеме, почти понял,

что вам нужно сделать, это отправить обратно веб-поток Grails "_flowExecutionKey", который отслеживает текущее состояние,

Я уверен, что вы видели это , поскольку это единственный достойный результат, который находит Google.

Я отправляю ajax-запрос к действию, которое заполняет шаблон и отправляет его обратно.с входным тегом,

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

Но вы можете попробовать отправить храм обратно, помеченный как JSON, с "_flowExecutionKey" вместе с данными, которые вы хотите отправить обратно,

Это мои двацентов

2 голосов
/ 13 января 2010

Помимо отслеживания выполнения (как написал Даксон), вам необходимо убедиться, что ваши кнопки названы _eventId_next и _eventId_skip. g: submitbutton, как правило, достаточно умен, чтобы сделать это для вас, но он не может быть внутри remoteForm.

Кроме того, мой код веб-потока использует параметр выполнения, а не flowExecutionKey - какую версию Grails вы используете?

0 голосов
/ 15 июня 2016

Здесь решение, которое работает в Grails 2.5.3, по крайней мере, для одного действия. Идентификатор и имя кнопки автоматически изменяются, чтобы включить в качестве префикса « 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>
...