2011-09-05 269 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獲勝併成爲默認操作。

分別使用短暫從保持流動狀態之間進行序列化服務。 (例如,不必實現可序列化)