Pergunta

Estou tentando fazer a transição para o próximo estado de um webflow usando solicitações AJAX. Mas ele permanece no mesmo estado e retorna o GSP como resposta para esse estado enquanto estou esperando o GSP para o próximo estado.

A seguir, o código do 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")
            }
        }
}

A seguir, a chamada do Ajax que estou fazendo para a transição do estado:

$.ajax({
            type: "POST",
            url: "/UN/user/gettingStartedAjax",
            success: function(data) {
                $("#wizardDiv").html(data);
            }
});

Os GSPs para cada estado (Flow1, Flow2, Flow3) contém o fragmento de código AA com o RemoteForm e exigido a seguir e pular os botões de envio para fazer a transição para o próximo estado e, como resultado, atualize o Div "WizardDiv". A seguir, o fragmento GSP para Flow1 State:

<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>
Foi útil?

Solução

Além de acompanhar a execução (como o Daxon publicado), você precisará garantir que seus botões sejam nomeados _EventId_Next e _EventId_SKIP. G: O submetbutton é normalmente inteligente o suficiente para fazer isso por você, mas pode não estar dentro de uma forma remota.

Além disso, meu código de fluxo da Web usa a execução do parâmetro, não o FlowExecutionKey - qual versão do Grails você está usando?

Outras dicas

Estou preso no mesmo problema, quase descobri,

O que você precisa fazer é enviar de volta o webflow do Grails "_flowexecutionKey" que acompanha o estado atual,

Tenho certeza que você viu isto, como é o único resultado decente que o Google encontra.

Envio uma solicitação de Ajax para uma ação, que preenche um modelo e a envia de volta com uma tag de entrada,

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

Mas você pode tentar enviar um templo de volta marcado como JSON com o "_flowexecutionKey" junto com os dados que você deseja enviar de volta,

Esses são meus dois centavos

Aqui, uma solução que funciona no Grails 2.5.3 pelo menos para uma única ação. O ID e o nome do botão são automaticamente modificados para incluir "EventID"Como prefixo, mas isso ainda não funcionou para mim, a menos que eu tenha adicionado _event_id manualmente como parâmetro de entrada. No entanto, não tenho certeza de como isso pode funcionar para vários eventos possíveis.

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top