問題:
私は現在のタイプのコンテンツを表示するグリッドを持っていますSomeModel
。私はそれのエントリをクリックするとGrid
、私はエントリの内容を表示するためにその入力としてオブジェクトを受け取りビューに移動したいと思います。
実装:
私が作成したこの動作achiveするにはDetailLayout
、このように:
public DetailLayout extends FlexLayout implements HasUrlParameter<SomeModel>{
/* skipped some details */
@Override
public void setParameter(BeforeEvent event, Host parameter) {
/* This is where I expected to be able to handle the object */
}
}
内からはGrid
私のようにナビゲートしてみました:
addSelectionListener((event) -> {
event.getFirstSelectedItem().ifPresent(somemodel -> {
getUI().ifPresent(ui -> {
ui.navigate(DetailLayout.class, somemodel);
});
});
});
しかし残念ながら、この動作は、その構文は完全に罰金であってもカントーVaadinでサポートされていません。
質問:
あなたは、ナビゲーションしながら、オブジェクトを渡すために別の方法を知っていますか私は、公式ドキュメントの特定の部分逃したのマニュアルを参照して?
前もって感謝します
キー値のコレクション
上のコメントで述べたように、他の回答には、URL、Vaadinが提供するキーと値のコレクションを使用して、舞台裏で、その後の作業の一環として、ID値を公開したくない場合。
Vaadinは、実際にはスコープの3つのレベルでキーと値のコレクションを提供します。
- コンテキスト
実行時にあなたの全体のウェブアプリ - セッションの
各ユーザー - UIは、
各Webブラウザのウィンドウ/タブ、Vaadinは、マルチウィンドウのWebアプリケーションをサポートして
アプリ全体のキーと値のコレクションはで提供されていますVaadinContext
、経由getAttribute
&setAttribute
方法。
VaadinService.getCurrent().getContext().setAttribute( key , value ) ;
ユーザごとのキーと値のコレクションはで提供されていますVaadinSession
、経由getAttribute
&setAttribute
方法。
VaadinSession.getCurrent().setAttribute( key , value ) ;
➥ごとのブラウザウィンドウ/タブのコレクションは、(あなたがこの質問では、ニーズのために何をしたい)それほど容易に利用可能ではありません。あなたは間接的なステップを通過する必要があります。上のComponentUtil
クラス、コールsetData
&getData
方法。加えて、あなたのキーと値を渡して、現在のパスUI
のオブジェクトを。
Component c = UI.getCurrent() ;
String key = "com.example.acmeapp.selectedProductId" ;
Object value = productId ;
ComponentUtil.setData( c , key , value ) ;
私のためにしてください投票チケット#6287、追加する機能要求setAttribute
/ getAttribute
上のメソッドUI
、クラスのそれと一致するようにVaadinSession
してVaadinContext
。