2017-02-08 4 views
-1

でUIを取得できません、私はこの方法で問題なくMainScreenをロード:は私のプログラムの最初のバージョンでは春

@SpringUI 
@Viewport("user-scalable=no,initial-scale=1.0") 
@Theme("mytheme") 

public class MyUI extends UI { 

    @Autowired 
    MainScreen mainScreen; 

    public void showMainView() { 
     addStyleName(ValoTheme.UI_WITH_MENU); 
     setContent(mainScreen); 
     getNavigator().navigateTo(getNavigator().getState()); 
    } 

    public static MyUI get() { 
     return (MyUI) UI.getCurrent(); 
    } 

} 

public class MyUI extends UI { 

    public void showMainView() { 
     addStyleName(ValoTheme.UI_WITH_MENU); 
     setContent(new MainScreen(MyUI.this)); 
     mainScreen.setUI(MyUI.this); 
    } 

    public static MyUI get() { 
     return (MyUI) UI.getCurrent(); 
    } 
} 

しかし、今、私はそれを変更しました@Autowired経由でMainScreenを入手するには、MainScreenのコンストラクターをクリアする必要がありましたが、は、ナビゲーターに必要なUIを取得する方法がわかりません。

私はちょうどヌル両方を取得します。

@Component 
@UIScope 
public class MainScreen extends HorizontalLayout { 

    public MainScreen() { 

     UI ui = UI.getCurrent();  // is null 
     MyUI ui2 = MyUI.get();  // is null 

     CssLayout viewContainer = new CssLayout(); 
     viewContainer.addStyleName("valo-content"); 
     viewContainer.setSizeFull(); 

     final Navigator navigator = new Navigator(ui, viewContainer); 

     // ... 

} 
+0

通常、[ナビゲータ](https://vaadin.com/docs/-part/framework/advanced/advanced-navigator.html)は、UIを初期化するときに、かなり接続されているため構成されていますそれを行うための論理的な場所の種類。 [Vaadin wikiで素早くspring-vaadinの統合を確認することもできます(https://vaadin.com/wiki/-/wiki/Spring+Vaadin/I+-+Getting+Started+with+Vaadin+Spring+and+ Spring + Boot)(5つのセクションすべてを必ず読んでください.3番目のセクションはナビゲーションに関連しています)。 – Morfic

答えて

0

あなたがタグ付けしたすべてのフレームワークに精通していません。論理的なエラーと思われるものや、誤ったデザインになると思います。

@AutowireMainScreenUIに入力すると、その中にあることを保証することができます。優先コンストラクタインジェクションを使用してそれを見ると、より明白かもしれません。

public class MyUI extends UI { 

    private MainScreen mainScreen; 

    @Autowired 
    public MyUI (MainScreen mainScreen) { 
     this.mainScreen = mainScreen; 
    } 
} 
MainScreen

は既にその時点でインスタンス化されており、mainScreenコンストラクタはMyUIに依存してはならないので、非常によく既にコードの他の部分であってもよいです。

どのように対処するかは、希望する動作と関係が何であるかによって異なります。 mainScreenUIクラスが必要ですが、それに依存できない場合は、UIクラス自体(mainScreen.foo(this);)から渡す必要があります。

関連する問題