Должен ли я использовать веб-потоки? - PullRequest
0 голосов
/ 15 января 2012

Я хочу собрать данные для класса домена через несколько форм.Я хотел бы инициализировать экземпляр домена, провести его по страницам формы (назначив собранные данные свойствам экземпляра) и сохранить экземпляр после успешного завершения последней формы.

Есть лиспособ сделать это без веб-потоков?

Ответы [ 2 ]

0 голосов
/ 16 января 2012

В качестве альтернативы комментарию Ant, вы можете использовать session, но с хранением недоменного объекта или простой карты.Это, безусловно, приведет к большой дополнительной сложности, и веб-потоки do обеспечивают большую защиту от случайных кнопок назад и т. Д.

Грубая идея:

вgrails-app/domain

class Widget {
    String name
    int id

    // constraints, etc
}

in grails-app/controllers

class WidgetCommand {
    // setup your command
}
class WidgetController {
    def savePage1 = { WidgetCommand cmd ->
        // validate, etc
        def widget = session.tempWidget ?: [:]
        widget.putAll(cmd.properties)
        session.tempWidget = widget
        [widget: widget]
    }
    def savePage2 = { WidgetCommand cmd ->
        // etc
    }
    def savePage3 = {
        // or something similar here
        def finalWidget = new Widget(session.tempWidget)
        finalWidget.save()
    }
}

Вы можете попытаться сохранить фактический объект домена непосредственно в памяти, но я считаю, что он будет автоматически сохранен при закрытии сессии, если выредактируете объект (в отличие от новых), и вам придется повторно связать его с сеансом Hibernate.

0 голосов
/ 15 января 2012

Есть ли способ сделать это без веб-потоков?

Для этого можно использовать поля hidden.Но я могу предпочесть, чтобы вы использовали веб-потоки.

Вот некоторые преимущества использования веб-потоков:

1) У вас есть две новые области действия flow и conversation, позволяющие хранить переменные, которыедоступ к вашему потоку

2) У вас есть простой DSL, чтобы держать вещи в порядке

3) Поскольку существует область действия flow, вы можете сделать что-то вроде этого:

 flow.someThing = new YourClassName(params) //places object in flow scope

Имейте в виду:

1) Если вы используете объекты с объемной областью, ваш класс должен быть реализован Serializable class.

2) И отGrails 1.2, вам нужно явно установить плагин Webflow.Документ гласит:

Начиная с Grails 1.2 и далее Webflow больше не находится в ядре Grails, поэтому для использования этой функции необходимо установить плагин Webflow: grails install-plugin webflow

(см. здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...