2011-09-05 5 views
0

Можно ли вставлять весенний боб в веб-поток Grails? Я попытался следующиезависимая инъекция Grails Webflow

class CheckoutController { 

    ShoppingService shoppingService 

    def checkoutFlow = { 
     start { 
      action { 
       // This attempt to access the service doesn't work 
       flow.addresses = shoppingService.getOrder() 
      } 
     } 
    } 
} 

я могу получить доступ shoppingService от обычного действия контроллера, но я не могу получить доступ к нему из действия WebFlow (см. Выше)

+0

Какие ошибки вы получаете? Я предполагаю, что WebFlow пытается сохранить все объекты Доступа в объекте потока, выдавая некоторые странные ошибки. – sbglasius

+0

Служба null, поэтому я получаю NPE, когда пытаюсь получить доступ к сервису. В этом коде нет объектов домена –

ответ

0

Сначала я подумал, что вы указали псевдокод, но я сделал пример приложения, используя ваш пример, и получил NPE. Я думаю, что это может быть ваша структура потока, которая является проблемой. action блоки должны проходить в состоянии потока. Ваше определение потока должно выглядеть примерно так:

class CheckoutController { 
    ShoppingService shoppingService 

    def checkoutFlow = { 

    start { 
     action { 
     flow.addresses = shoppingService.getOrder() 
     if(flow.addresses) { 
      showForm() 
     } 
     else { 
      showError() 
     } 
     } 
     on("showForm").to "showForm" 
     on("showError").to "showError" 
    } 

    showError { 
     ... 
    } 
    //etc. 
    } 
} 

Вы можете определенно использовать внедренные службы в своих веб-потоках. Я предполагаю, что проблема заключается в вашей структуре потока.

1

добавить следующие строки в ваш контроллер:

def transient shoppingService 
1

Есть проблемы, связанные с инъекцией зависимостей с webflows в контроллерах, которые содержат традиционные действия плюс webflows. Это сработало для меня, если традиционное действие было выполнено в первую очередь.

см: GRAILS-7095 GRAILS-4141

Webflows также сломать представления о DefaultAction в смешанных контроллеров. Я нашел первый выигрыш в веб-потоке и стал действием по умолчанию.

по-разному с использованием переходный позволяет сериализовать обслуживание между состояниями потока. (например, не нужно реализовывать сериализуемые)

Смежные вопросы