2011-09-05 216 views
0

是否可以将Spring bean注入到Grails webflow中?我尝试以下依赖项注入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会尝试将所有访问的Domain对象存储在流程范围中,并出现一些奇怪的错误。 – sbglasius

+0

该服务为空,因此当我尝试访问该服务时,我得到了一个N​​PE。此代码中没有涉及域对象 –

回答

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的混合控制器。我发现第一个webflow获胜并成为默认操作。

分别使用短暂从保持流动状态之间进行序列化服务。 (例如,不必实现可序列化)