Grails 1.2.1 con Webflow Plugin (1.2.1) - params no ser devuelto
-
24-09-2019 - |
Pregunta
Yo estoy usando la webflow plugin de Grails por primera vez y estoy teniendo algunas dificultades.Para resumir, una vez dentro de la Webflow, la información no parece estar volviendo a la controladora de la forma.Todos los ejemplos que he mirado indican que los parámetros son devueltos a la acción de controlador normalmente y, a continuación, usted puede poner los objetos en el flujo de alcance según sea necesario.Por desgracia, el ilustrado printlns son tanto la salida nula, y cualquier programática de salida de la params muestra que el esperado 'testField1' y 'testField2' no están en los parámetros del objeto.La excusa de la no-uniforme de cuadros de texto y formas de presentación - fueron el resultado de la experimentación.Una versión simplificada de la acción del controlador de flujo:
def generateProductVariantsFlow = {
start() {
action {
[productInstance:Product.get(params.id)] //the entry params contains the expected id
}
on ("success").to("selectAttributeValues")
}
selectAttributeValues() {
on("next"){TestCommand tc -> //params does not have testField1 or testField2
println "TEST COMMAND"
println "${tc.testField1}"
println "${tc.testField2}"
}.to("selectProductVariants")
on("cancel").to("finishBeforeStart")
}
selectProductVariants {
on("cancel").to("finish")
on("previous").to("selectAttributeValues")
on("next").to("confirmNewVariants")
}
//other states here
finish {
redirect(action:"list")
}
finishBeforeStart { //somewhat misleading state name, but shouldn't be relevant
redirect(controller:"product",action:"show")
}
}
El SGP y Comando son igual de simple - selectAttributeValues SGP:
<%@ page import="com.castaway.rigging.Product" %>
<g:form action="generateProductVariants">
<input type="integer" id="testField1" name="testField1" value="test1" />
<g:textField name="testField2" value="test2"/>
<div class="buttons">
<span class="button"><g:actionSubmit class="cancel" name="cancel" value="Cancel"/></span>
<g:link action="generateProductVariants" event="next" >Next</g:link>
</div>
</g:form>
</div>
</body>
Comando:
class TestCommand implements Serializable {
def testField1
def testField2
}
Solución
¿Por qué utilizar un enlace en lugar de un botón de envío para desencadenar el próximo evento?
Al hacer clic en ese enlace va a hacer una petición GET que no se incluyen los campos de formulario.
Usted necesidad de utilizar el botón de enviar para activar el siguiente evento.
saludos
Lee