2014-01-07 2 views
0

참고 관리 : 이 문제는 나 Vaadin이가 빈을 "재설정"여부를 "더 나은"솔루션이 거세한 숫양에 따라 관련 될 수도 있고 그렇지 않을 수도있다.는 콩

배경 시나리오

I가 완료되면, (만약 angel 및 추가 기능 "만약 angel에 대한 마법사"를 사용하여) 테이블에 전송되는 일부 값을 입력하는 마법사를 구축하고있다.

애드온은 onAdvance() 및 onBack() 메소드의 현재 단계 (강제)를 강제 호출하지 않고 마법사를 재설정하는 방법을 제공하지 않으므로 false를 반환합니다. 내 단계 중 일부는 예를 들어 사용이 필요한 모든 데이터를 채우지 않은 경우 해당 방법에서 논리를 사용하기 때문입니다. 나는이 @Component를 관리하기 위해 스프링을 사용하고 있기 때문에

나는 간단하지, 마법사의 새 인스턴스를 만들 수 있습니다.

그래서,이 사실은 제대로 마법사를 다시 설정하기 위해 콩을 다시 저를 떠난다.

내 질문은 어떻게 "재설정"할

하는 봄 콩 (@Component)를 관리? 나는이 Bean에 일부 종속성을 주입했다고 덧붙여 야한다. 합니다 (angel이라는 사람들을위한)

이나 ... :

새로운 마법사를 만드는 대신이 마법사 다른 재설정의 또 다른 방법이 있나요?

일부 코드

@Component 
@Scope("session") 
public class MyWizard extends Wizard { 

    @Inject 
    private MyWizardContainer myWizardContainer; 
    @Inject 
    private MyService myService; 
    @Inject 
    private MyWizardStep1 myWizardStep1; 
    @Inject 
    private MyWizardStep2 myWizardStep2; 
    @Inject 
    private MyWizardStep3 myWizardStep3; 
    @Inject 
    private MyMainTableContainer myMainTableContainer; 

    final static Logger logger = LoggerFactory.getLogger(MyWizard.class); 

    private static final long serialVersionUID = 1L; 

    public MyWizard() { 
     setupListener(); 
    } 

    public void addSteps() { 
     this.addStep(myWizardStep1); 
     this.addStep(myWizardStep2); 
     this.addStep(myWizardStep3); 
     this.mainLayout.setComponentAlignment(this.footer, Alignment.BOTTOM_LEFT); 
    } 

    private void setupListener() { 

     this.addListener(new WizardProgressListener() { 

      @Override 
      public void wizardCompleted(WizardCompletedEvent event) { 
       endWizard("Wizard Finished Successfully!"); 
      } 

      @Override 
      public void wizardCancelled(WizardCancelledEvent event) { 
       endWizard("Wizard Cancelled!"); 
      } 

      @Override 
      public void stepSetChanged(WizardStepSetChangedEvent event) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void activeStepChanged(WizardStepActivationEvent event) { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 

    private void resetWizard() { 
     myWizardContainer.removeAll(); //here I'm simply resetting all data that the user generated thus far in the wizard 
     this.activateStep(myWizardStep1); //this will not work, as some steps will not always return true on onBack() and/or onAdvance() 
    } 

    private void endWizard(String message) { 
     resetWizard(); 
     this.setVisible(false); 
     Notification.show(message); 
    } 
} 

답변

2

SpringVaadinIntegration, 당신은 아마 사용하는 것이, @Components을 할 모든 요소를 ​​필요로하지 않습니다 만 UI는 주석해야합니다.

당신의 마법사와 스텝은이 경우 구성 요소가 아니어야합니다. 당신이 정말로 의존성을 주입해야한다면 @Configurable annotation을 사용할 수 있습니다. 스프링에 의해 관리되지 않는 클래스들에 의존성을 주입 할 수 있습니다. 작동하게 만들다). 필요한 경우 마법사와 단계를 새 개체로 만듭니다.

+0

귀하의 제안은 합리적인 소리 당신은 내가 SVI를 사용하고 당신의 가정에서 올바른입니다. 내가 여기 뭔가 잘못하고 있다는 느낌이 들었고, @Configuration 주석에 대해서도 몰랐다. 나는이 첫번째 일을 내일 시도 할 것이고, 결과와 함께 앙갚음을 할 것이다! 감사! – Roger

+0

'@ Configuration '을 어떻게 구성하여'Wizard' (POJO)가'@Inject'를 받아 들일 수 있는지 이해할 수 없습니다. 나는'@ Configuration'의 Spring 문서를 읽고 간단한 예제를 만들었는데,'@Configuration' 주석이 달린 AppConfig 클래스를 사용하여'새로운 마법사 '와'Wizard'가 가질 수있는 간단한 @Component'를 생성합니다 ('MyService')를 사용합니다. 그러나 실제로 "bean"(예 :'MyService')을 "POJO -ized"Wizard에 주입 할 때 (필자가 찾을 수있는) 아무것도 언급하지 않았습니다. 내가 시도 할 때, 나는'BeanCreationException'을 얻는다. 모든 단서? – Roger

+0

죄송합니다, 나중에 다음 편집, 주석이 – dzezzz