依赖注入Grails Webflow

时间:2011-09-05 10:04:56

标签: grails groovy spring-webflow

是否可以将Spring bean注入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的操作访问它(参见上文)。

3 个答案:

答案 0 :(得分:1)

将以下内容添加到您的控制器:

def transient shoppingService 

答案 1 :(得分:1)

在包含传统操作和Webflow的控制器中,Webflow的依赖注入存在问题。如果首先执行传统操作,它对我有用。

请参阅: GRAILS-7095 GRAILS-4141

Webflows还打破了混合控制器中 defaultAction 的概念。我发现第一个webflow获胜并成为默认操作。

单独使用 transient 可以防止您的服务在流状态之间进行序列化。 (例如,不必实现可序列化)

答案 2 :(得分: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.
  }
}

您绝对可以在网络流程中使用注入的服务。我猜测问题在于你的流程结构。