Веб-поток Grails: перенаправить на веб-поток из другого действия контроллера?

Вот что я думаю сделать:

class MyController {
    def goToWizard = {
        if (params.option1)
            redirect actionName:'wizard1', params:params
        if (params.option2)
            redirect actionName:'wizard2', params:params
    }
    def wizard1Flow = {
       start {
          action {
              // put some values from the params into flow scope
              [thingsThatGotPassedIn:params.thingsThatGotPassedIn]
          }
          on('success').to 'nextThing...'
       }
       // wizard 1 implementation...
       //...
       done {
          redirect view:'somewhereElse'
       }
    }
    def wizard2Flow = {
       start {
          action {
              // put some values from the params into flow scope
              [thingsThatGotPassedIn:params.thingsThatGotPassedIn]
          }
          on('success').to 'nextThing...'
       }
       // wizard 2 implementation...
       //...
       done {
          redirect view:'somewhereElse'
       }
    }
}

Я пробовал что-то подобное, но, похоже, я никогда не попадал в веб-поток. Это верный подход?

Причина всего этого в том, что у меня есть gsp, который выглядит так (форма с двумя кнопками отправки внутри, каждая из которых должна запускать другой веб-поток)

<g:form action="goToWizard">
    ...
    <g:submitButton name="wiz1" value="Goto Wizard1"/>
    <g:submitButton name="wiz2" value="Goto Wizard2"/>
</g:form>

Внутри формы есть некоторые элементы ввода, значения которых я хочу передать в любой веб-поток, который будет вызван. Я бы предпочел, чтобы отправка формы напрямую вызывала соответствующий веб-поток (как работают все примеры, которые я видел), но есть два веб-потока и только одна форма. Как я могу это сделать?

Меня также интересуют альтернативные реализации, если вы считаете, что это неправильный путь. Я новичок в веб-потоках в Grails.


person Troy    schedule 06.03.2011    source источник


Ответы (1)


Взгляните на тег actionSubmit в документации Grails. Я думаю, вы должны использовать actionSubmit вместо submitButton

actionSubmit создает кнопку отправки, которая соответствует определенному действию, что позволяет вам иметь несколько кнопок отправки в одной форме. Обработчики событий Javascript можно добавлять с использованием тех же имен параметров, что и в HTML.

При таком подходе Вам не нужно указывать action в теге form, т.е. не нужно делать проверку в goToWizard. Вы можете отправлять содержимое прямо в ваше конкретное действие.
Является ли это решением вашей проблемы?

person mj.scintilla    schedule 06.03.2011
comment
Да, этот способ проще. Я избавился от атрибута действия в теге формы и использовал 2 тега actionSubmit вместо тегов submitButton. В actionSumits указаны «мастер1» и «мастер2» соответственно для своих атрибутов действия, и мне больше не нужно действие «goToWizard» в контроллере. - person Troy; 07.03.2011