Grails Webflow с Ajax
-
20-09-2019 - |
Вопрос
Я пытаюсь перейти к следующему состоянию веб -потока, используя запросы Ajax. Но он остается в том же состоянии и возвращает 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 Call, который я делаю для перехода штата:
$.ajax({
type: "POST",
url: "/UN/user/gettingStartedAjax",
success: function(data) {
$("#wizardDiv").html(data);
}
});
GSP для каждого состояния (Flow1, Flow2, Flow3) содержит фрагмент кода AA, имеющий удаленные и требуемые дальше, и пропустите кнопки отправки для перехода в следующее состояние, и в результате обновляют «Wizarddiv» div. Ниже приведен фрагмент 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>
Решение
Помимо отслеживания выполнения (как опубликовал Daxon), вам нужно убедиться, что ваши кнопки названы _EVENTID_NEXT и _EVENTID_SKIP. G: Sepobutton обычно достаточно умна, чтобы сделать это для вас, но это может быть не внутри удаленной формы.
Кроме того, мой код веб -потока использует выполнение параметров, а не FlowExecutionKey - какая версия Grails вы используете?
Другие советы
Я застрял на той же проблеме, почти понял это,
Что вам нужно сделать, это отправить обратно веб -поток Grails "_flowExecutionKey", который отслеживает текущее состояние,
Я уверен, что вы видели это, как это единственный приличный результат, Google находит.
Я отправляю запрос Ajax на действие, которое заполняет шаблон и отправляет его обратно в входной тег,
<input id="flowExecutionKey" name="_flowExecutionKey" value="${request.flowExecutionKey}" size="100"/>
Но вы можете попробовать отправить храм обратно, отмеченный как JSON с «_flowExecutionKey» вместе с данными, которые вы хотите отправить, обратно,
Это мои два цента
Здесь решение, которое работает в 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>