2011-09-05 14 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() 
      } 
     } 
    } 
} 

次のIは、通常のコントローラのアクションから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の概念を破ります。私は最初のWebflowが勝って、デフォルトのアクションになることを発見しました。

個別にtransientは、フロー状態間でサービスをシリアル化しないようにします。 (たとえば、シリアライズ可能ではありません)