Grails 1.2.1 с подключаемым модулем Webflow (1.2.1) — параметры не возвращаются

Я впервые использую плагин webflow для Grails, и у меня возникли некоторые трудности. Подводя итог, можно сказать, что в Webflow никакая информация не возвращается в контроллер из формы. Все примеры, которые я рассмотрел, показывают, что параметры возвращаются в действие контроллера нормально, а затем вы можете помещать объекты в область потока по мере необходимости. К сожалению, проиллюстрированные printlns выводят null, и любой программный вывод параметров показывает, что ожидаемые «testField1» и «testField2» не находятся в объекте params. Извините за неоднородные текстовые поля и способы отправки - они были результатом экспериментов. Упрощенная версия потока действий контроллера:

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")
    }

}

GSP и Command одинаково просты — selectAttributeValues ​​GSP:

<%@ 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>

Command:

class TestCommand implements Serializable {
        def testField1
        def testField2
    }

person Aaron    schedule 03.03.2010    source источник


Ответы (1)


Почему вы используете ссылку вместо кнопки отправки для запуска следующего события?

При нажатии на эту ссылку будет выполнен запрос GET, который не будет включать поля формы.

Вам нужно использовать кнопку отправки, чтобы вызвать следующее событие.

ваше здоровье

Ли

person leebutts    schedule 03.03.2010
comment
Да, это определенно проблема. Ссылка была чем-то, с чем я поигрался, пытаясь заставить форму отправляться в действие потока. К сожалению, основной причиной того, что я пошел по этому пути, был тот факт, что ‹g:actionSubmit class=edit name=next value=Next/› вообще не выполнял действие потока (запрошенный ресурс недоступен). Я до сих пор не уверен, почему они ссылаются на действие, а кнопка отправки — нет. - person Aaron; 05.03.2010
comment
Привет, actionSubmit не учитывает WebFlow, вам нужно использовать ‹g:submitButton event=next/› - person leebutts; 05.03.2010
comment
Спасибо - как вы сказали, моей проблемой было непонимание различий между g:actionSubmit и g:submitButton в grails. - person Aaron; 05.03.2010