Внедрение зависимости Grails Webflow - PullRequest
0 голосов
/ 05 сентября 2011

Можно ли добавить боб Spring в веб-поток Grails? Я попробовал следующее

class CheckoutController {

    ShoppingService shoppingService

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

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

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

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

def transient shoppingService 
1 голос
/ 11 декабря 2012

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

см: Grails-7095 Grails-4141

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

отдельно с использованием transient предотвращает сериализацию вашего сервиса между состояниями потока. (например, не нужно реализовывать сериализуемость)

0 голосов
/ 06 сентября 2011

Сначала я подумал, что вы перечислили псевдокод, но я сделал пример приложения, используя ваш пример, и также получил 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.
  }
}

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

...