0

良い一日。

アプリケーションがあります(CDIアドオンを使用):

@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:

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()メソッドはクラスのインスタンスを取得できないようです。

なぜこれが起こるのか誰かが知っていますか?

4

2 に答える 2

1

Wildfly 8.1 および 8.2 でこの問題が発生しましたが、WEB-INF に空の beans.xml を追加すると機能しました。したがって、上記が機能しない場合は、それを試してください。

于 2014-12-02T22:25:02.680 に答える
1

アプリケーションでは、「new」を介して LoginWindow を作成します。そうすれば、CDI コンテナーによって管理されません。ウィンドウをアプリケーションに挿入してから、init() メソッドで設定する必要があります。

于 2012-11-26T22:38:55.667 に答える