2012-09-23 6 views
0

안녕하세요.Vaadin : CDI 주사가 null 인 경우

@VaadinScoped(VaadinScope.APPLICATION) 
public class AdminApplication extends AbstractCdiApplication { 

    @Inject 
    private Instance<Lang> lang; 

    @Override 
    public void init() { 
    setMainWindow(new LoginWindow(this)); 
    } 

    public void authenticate(String login, String password) throws Exception { 
    lang.get(). ... 
} 
    ... 

그리고 LoginWindow : (A CDI가에 추가하여) 응용 프로그램이 있습니다

public class LoginWindow extends Window { 
    ... 
    public LoginWindow(AdminApplication application) { 
     super("LoginWindow Login"); 
     this.application = application; 
     initUI(); 
     initLoginListener(); 
    } 
     private void initLoginListener() { 
     btnLogin.addListener(new Button.ClickListener() { 
      public void buttonClick(Button.ClickEvent event) { 
       try { 
        String username = (String) txtUsername.getValue(); 
        String password = (String) txtPassword.getValue(); 

        application.authenticate(username, password); 
       } catch (Exception e) { 
       showNotification(e.toString()); 
       } 
      } 
    }); 
} 

lang.get()가 null가 아닌 응용 프로그램의 초기화 단계 때 문제가, 하지만 LoginWindow에서 application.authenticate() 메서드를 호출하면 lang.get()은 항상 null입니다. 참조를 사용할 때 Instance.get() 메소드는 클래스 '인스턴스를 가져올 수 없습니다.

왜 이런 일이 발생하는지 알고 있습니까?

+0

CDI를 지원할 수는 없지만 봄에 기꺼이 도움이됩니다. – OlegYch

+0

감사합니다, OlegYch. 나는 또한 봄을 좋아하지만 CDI로 Vaadin을 사용하는 것이 요구된다. 초기화/주사 순서 문제 – Dmitry

답변

1

응용 프로그램에서 "새"를 통해 LoginWindow를 만듭니다. 그런 식으로, 그것은 CDI 컨테이너에 의해 관리되지 않습니다. 응용 프로그램에 윈도우를 삽입 한 다음 init() 메소드에서 윈도우를 설정해야합니다.

1

Wildfly 8.1 및 8.2에서는이 문제가 있었지만 WEB-INF에 빈 beans.xml을 추가했을 때 작동했습니다. 그래서 위의 경우 작동하지 않는 시도하십시오.

관련 문제