現在、Spring Boot と Vaadin を利用したサンプル実装を作成しようとしています。Spring Managed Bean で vaadin ナビゲーターを初期化しようとしましたが、UI オブジェクトにアクセスする必要があります。
多くのクラスとインターフェイスを必要とする MVP パターンを実装しましたが、問題は次のサンプル コードに要約されます。
@SpringUI
public class MyVaadinUI extends UI
{
@Autowired
private MainPresenter mainPresenter;
protected void init(VaadinRequest request)
{
setContent(mainPresenter.getView());
}
}
@UIScope
@SpringComponent
public class MainPresenterImpl implements MainPresenter
{
@Autowired
public MainPresenterImpl(MainModel model, MainView view)
{
super(model, view);
}
@PostConstruct
public void init()
{
UI ui = UI.getCurrent();
Assert.isNull(ui); // ui is always null
}
}
UI インスタンスが ThreadLocal 変数に保持されていることを既に読みました。デバッグで確認できました。有線 Bean MainPresenterが別のスレッドにある理由がわかりません。また、スコープの問題であってはなりません。
これまでのところ、Presenter で UI インスタンスにアクセスしようとするまで、アプリケーションは正常に動作します。
VAADIN wiki は役に立ちませんでした。このフォーラムでは役立つ回答を見つけることができませんでした。