Pregunta

Estoy tratando de hacer la transición al siguiente estado de un WebFlow usando peticiones Ajax. Pero se mantiene en el mismo estado y devuelve el SGP como la respuesta para ese estado mientras yo estoy esperando el SGP para el siguiente estado.

A continuación se muestra el código 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 continuación se presenta el Ajax llamada que estoy haciendo para la transición de estado:

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

Los GSP para cada estado (flow1, FLOW2, FLOW3) contiene un fragmento de código que tiene un remoteForm y requerido en Siguiente y vaya los botones de envío para la transición al siguiente estado y como resultado de actualizar el div "wizardDiv". A continuación se presenta el fragmento GSP para el estado 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>
¿Fue útil?

Solución

Además de hacer el seguimiento de la ejecución (tal como fue anunciado DAXON), que necesita para asegurarse de que sus botones son llamados _eventId_next y _eventId_skip. g:. submitButton es normalmente lo suficientemente inteligente como para hacer esto para usted, pero puede que no sea dentro de un remoteForm

Además, mi código de flujo web utiliza el parámetro de ejecución, no flowExecutionKey - ¿qué versión de Grails ¿Está utilizando

Otros consejos

Estoy atascado en el mismo problema, casi lo descubrió,

lo que hay que hacer, es enviar de vuelta los griales WebFlow "_flowExecutionKey" que mantiene un seguimiento de la situación actual,

Estoy seguro que has visto esta , ya que es el único resultado decente encuentra Google.

puedo enviar una petición AJAX a una acción, que rellena una plantilla y lo envía de vuelta con una etiqueta de entrada,

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

Sin embargo, usted podría intentar enviar un templo posterior marcado como JSON con el "_flowExecutionKey", junto con los datos que desea enviar de vuelta,

Eso es mi granito de arena

A continuación, una solución que funciona en griales 2.5.3 al menos por una sola acción. La identificación y el nombre del botón se modifican automáticamente para incluir " eventId " como prefijo, pero esto aún no funcionaba para mí, si he añadido _event_id manualmente como parámetro de entrada. Sin embargo, no estoy seguro de cómo esto puede funcionar para varios eventos posibles.

<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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top