Vaadin 7では、Webアプリケーションは複数のエントリポイントを持つことができます。 UI。各 [〜#〜] ui [〜#〜] は、 View sを含む単一の Navigator のみを持つことができます。
マルチレベルナビゲーションを必要とするアプリケーションに取り組んでおり、一部の画面では、ナビゲーターを備えた単一のUIを使用するか、共有メニューコンポーネントを備えた複数のUIを使用する必要があるかがわかりません。
UIとNavigatorの長所と短所は何ですか?この選択に関するガイドラインはありますか?
私の意見では、仕事をするのに十分なので、Navigatorで1つのUIを使用することをお勧めします。多くの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を作成して、サブメニューの変更を処理できます。
あなたの質問の主題は、過去2013年に非常に汗をかきました。私はVaadin 7 UIとNavigatorのさまざまな側面を研究、分析、テストしました。
私はこのテーマに関する多くのフレームワーク、wiki、論文を見ました。 Vaadin 7に関連するものと関連しないもの。
少し前(2013年初頭)でしたが、私はこのテーマについて新鮮ではありません。とにかく、これらは私が復活させることができるリンクの一部です:
要件は、Vaadin MVP Liteのシナリオに多少似ていました。しかし、ビューの構成をさらに抽象化し、柔軟性を必要としていました。提供されたナビゲーターを一生懸命使用しようとしましたが、簡単にカスタマイズできませんでした。
Navigatorは具象クラスです。 UIに含めることができるナビゲータは1つだけです。 Navigatorコンストラクターには、次の行があります。
this.ui.setNavigator(this);
Navigatorは、単純なニーズを持つほとんどのアプリケーションで素晴らしい仕事をし、すぐに使える素晴らしい機能を提供しますが、実際には拡張やカスタマイズを目的とするものではありません。留意すべきもう1つの側面は、Navigatorでビューを変更するときに、画面上のすべてのコンポーネントを変更することです。小さなビットを変更することはできません。
その後、私は面白い道に私を置くこのガイドを見つけました:ユーザーインターフェイスの作成、第7章-MSDN Microsoft
この記事は本当にすてきで、魅力的です。 Delphiやその他のコンポーネントベースのフレームワークの動作と多くの共通点がありますが、「地域」の概念は本当に恵まれました。他の章も非常に興味深いものです(モジュラーアプリケーション開発、MVVP)。
最終的に、1つのUIのみで構成される地域の概念を採用しました。簡単に言うと、次のように機能します。
UIが初期化されると、1つのリージョン(UI全体)が「ルート」リージョンとして登録されます。次に、ログインフォームを表すコンポーネントが「ルート」リージョンでホストされます。ログインに成功すると、別のコンポーネントが「ルート」リージョンでホストされます(ログインコンポーネントを削除します)。このコンポーネントもホストです。「メイン」と呼ばれる別のリージョンを登録し、左側のナビゲーションメニューも備えています。これで、コンポーネント(たとえば、ウェルカムページ)を表示する場合は、「メイン」リージョンを取得して、表示するコンポーネントを配置できます。
Vaadin Navigatorは、ブックマークと戻るボタンのサポートを実装しています。開発しなかったので残念でしたが、アプリケーションの要件ではありませんでした。私見、Vaadinの連中は、Navigatorをシンプルに保つために難しいが良い決断をした。状態管理は簡単に実装できません。将来、ナビゲータがさらに拡張可能になるといいですね。とにかく、現在のナビゲーターはほとんどの平均的なニーズに対応していると思います。
私の答えは予想よりも長い。私の努力が役立つことを願っています。