2011-09-05 7 views
0

Spring 빈을 Grails 웹 플로우에 삽입 할 수 있습니까? 제가의존성 삽입 Grails 웹 플로우

class CheckoutController { 

    ShoppingService shoppingService 

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

다음 I 정규 컨트롤러 액션 shoppingService에서 액세스 할 수했지만, I는 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를 개념을 휴식. 첫 번째 웹 플로우가 우승하여 기본 액션이되는 것을 발견했습니다.

transient은 흐름 상태간에 서비스가 직렬화되지 않도록합니다. (예 : 직렬화를 구현할 필요가 없음)