私の意見では、仕事をするのに十分なので、Navigator で 1 つの UI を使用することをお勧めします。多くの UI の主な不便さは、切り替え時のリロードです。また、望ましい一貫性について覚えておく必要があります。各 UI で同じヘッダーを持つようにします。そして、私の経験から、あなたは確かにより多くの問題に遭遇するでしょう;-)
きれいにするには、MVP パターンを使用する必要があります。イベントを処理するために、com.google.common.eventbus.EventBus でこれと同様のものを使用します。ビューに eventBus を追加し、そこにイベントを投稿し、適切なプレゼンターで処理します。ビューにリスナーを実装するのではなく、より問題があると考えています。MVP は既に「プレゼンター」と「ビュー」を予約しているため、Vaadin ビューを「ページ」と呼びます。
ヘッダー、フッターのメイン メニュー、コンテンツ コンテナー (レイアウトなど) を作成して、ナビゲーターを次のように配線できます。
Navigator n = new Navigator(UI.getCurrent(), layout);
ナビゲーションを管理するために PagesEnum を作成し、ビューを変更するときに PageEnum.SOME_PAGE をパラメーターとして取得する ChangePageEvent を投稿します。オプションで、表示するアイテムの ID もあります。したがって、MainPresenter には次のものがあります。
@Subscribe
public void changePage(ChangePageEvent event) {
String url = event.getPageName();
if (event.hasId()) {
url += "/" + event.getEntityId();
}
navigator.navigateTo(url);
}
次に、さまざまな可能性があります。
ページの enter メソッド (Vaadin ビュー) で、適切なサブメニューが表示されていることを確認します。
ChangePageEvent にパラメータとして追加し、changePage メソッドで処理します。
PageEnum に新しいフィールドとしてハードコードします。subMenu を作成し、サブメニューの他の列挙型を作成し、changePage メソッドで処理します。
サブメニューはおそらく Navigator を接続するコンテナの外にあるため、そこで SubMenuPresenter と SubMenuView を作成してサブメニューの変更を処理できます。