Domanda

Sto cercando di passare al successivo stato di un WebFlow utilizzando richieste Ajax. Ma rimane nello stesso stato e restituisce l'SPG come risposta per quello stato, mentre mi aspetto lo SPG per il prossimo stato.

In seguito è il codice 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")
            }
        }
}

In seguito è l'Ajax chiamata sto facendo per la transizione di stato:

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

I GSP per ogni stato (flow1, flow2, FLOW3) contiene un frammento di un codice dotato remoteForm & richiesto Avanti e passare presentare pulsanti per la transizione allo stato successivo e di conseguenza aggiornare il div "wizardDiv". Di seguito è riportato il frammento GSP per lo stato 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>
È stato utile?

Soluzione

Oltre a tenere traccia dell'esecuzione (come pubblicato Daxon), è necessario assicurarsi che i pulsanti sono chiamati _eventId_next e _eventId_skip. g:. submitButton normalmente è abbastanza intelligente per fare questo per voi, ma potrebbe non essere all'interno di una remoteForm

Inoltre, il mio codice flusso web utilizza l'esecuzione parametro, non flowExecutionKey -? Quale versione di Grails stai usando

Altri suggerimenti

Sono bloccato sullo stesso problema, quasi capito,

quello che devi fare, è inviare di nuovo i Grails webflow "_flowExecutionKey" che mantiene traccia dello stato corrente,

Sono sicuro che hai visto questo , come il suo l'unico risultato decente trova Google.

mando una richiesta AJAX per un'azione, che popola un modello e lo rimanda indietro con un tag input,

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

Ma si potrebbe provare a inviare un tempio posteriore contrassegnato come JSON con il "_flowExecutionKey" insieme con i dati che si desidera inviare di nuovo,

Ecco i miei due centesimi

Ecco una soluzione che funziona in Grails 2.5.3, almeno per una singola azione. L'id e il nome del tasto vengono modificate automaticamente per includere " eventId " come prefisso, ma questo ancora non ha funzionato per me, se non ho aggiunto _event_id manualmente come parametro di input. Tuttavia, non sono sicuro di come questo possa funzionare per più eventi possibili.

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top