Question

Je suis en train de passer à côté d'un état WebFlow utilisant des requêtes Ajax. Mais il reste dans le même état et retourne le SPG comme réponse à cet état alors que je me attends à la PGS pour le prochain état.

Voici le code de 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")
            }
        }
}

Après l'appel est Ajax je fais pour la transition de l'État:

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

Les GSP pour chaque état (flow1, Flow2, flow3) contient un fragment de code ayant remoteForm et nécessaires à côté et sauter soumettre des boutons pour la transition vers l'état suivant et en conséquence la mise à jour div « wizardDiv ». Voici le fragment SPG pour l'état 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>
Était-ce utile?

La solution

En plus que le suivi de l'exécution (comme Daxon affiché), vous devez vous assurer que vos boutons sont appelés _eventId_next et _eventId_skip. g. submitButton est normalement assez intelligent pour le faire pour vous, mais il pourrait ne pas être à l'intérieur d'un remoteForm

En outre, mon code de flux Web utilise l'exécution des paramètres, pas flowExecutionKey - quelle version de Grails utilisez-vous

Autres conseils

Je suis coincé sur le même problème, presque tout compris,

ce que vous devez faire, est renvoyer les Grails webflow « _flowExecutionKey » qui garde suivi de l'état actuel,

Je suis sûr que vous avez vu cette , comme le seul résultat décent Google trouve.

J'envoie une requête ajax à une action, qui remplit un modèle et le renvoie avec une étiquette d'entrée,

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

Mais vous pouvez essayer d'envoyer un temple retour marqué vers le haut comme JSON avec le « _flowExecutionKey » ainsi que les données que vous souhaitez renvoyer,

C'est mon grain de sel

Voici une solution qui fonctionne dans Grails 2.5.3 au moins pour une seule action. L'identifiant et le nom du bouton sont automatiquement modifiés pour inclure « eventId » comme préfixe, mais cela ne fonctionne toujours pas pour moi si j'ajouté _event_id comme paramètre d'entrée manuellement. Cependant, je ne sais pas comment cela peut fonctionner pour plusieurs événements possibles.

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top