私は現在、JSF 2.0について学んでいます。この会話スコープ機能の存在を嬉しく思っています。これは、新しいタブまたは新しいウィンドウを開く際に非常に役立ちます同じページを持ち、別々のリソースを持ち、互いに上書きしません。JSF CDI:会話スコープBeanのベストプラクティス
しかし、会話をいつ開始するのか、いつ終了するのかについて、これをどのようにうまく実装するのが面白いですか。
私の場合、私は各JSFページごとに各CDI Beanを持っています。私はメニューがあり、それがクリックされるとAページにつながり、AからはBにつながり、BはCにつながり、CはDにつながり、これら4つのページはすべて1つに接続されます鎖。
BまたはCまたはDのBeanからAのBeanプロパティにアクセスすることは可能です.CまたはDのBeanなどからBのプロパティにアクセスすることもできます。
今はかなり混乱してについてのイム:
- これらすべてのA B C Dはちょうどおそらく 対話スコープ内かどうか、または あるべきか?私は を別のページの というABCDチェーンの外にあると思うので、 のデータをBeanBに供給する方法はまだ分かりませんが、ページ Fのように、ページBのようにナビゲートすることができます。 これらすべてのABCDが1つの豆
- と 会話を開始するには、イム コンストラクタについて考え、へ を組み合わせる必要がありますが、私は 会話を開始することを好むので、それは、 良いアイデアだと思ういけないかどうかを
- まず、ない豆ページを アクセスするときの周りの
これについてあなたの考えをお伝えください。
CDIは標準JSFの一部ではありません。CDIは 'javax.enterprise'パッケージの注釈をカバーするContexts and Dependency Injection(JSR-299)の略です。会話スコープは、標準JSFの一部でもありません。 JSF 1.2の時代にJBoss Seamの発明であり、JSF 2.0仕様でView Scopeとして採用されました。@ ViewScopedアノテーションでトグル可能です。さて、あなたは実際に何を話していますか? – BalusC
こんにちはBalusC、説明をありがとう。私はCDIという用語を使って、私が使っていることを明確にしましたが、その情報は私の質問と無関係かもしれません:)私の知る限り、@ViewScopedは再表示された単一ページのもので、プロパティは持続した。しかし、私が会話の範囲から達成したいのは、複数のタブで同じページを開くことができるということです。各タブは、独自のセッションスコープを持つかのように表示されます。したがって、タブ上のmyBean.nameに 'albert'という値を送信すると、他のタブでmyBean.nameがオーバーライドされません。しかし、私はどこで会話を開始し、終了するのか混乱しています。 – bertie
これは4ページあり、たとえばページAがブラウズページ、ユーザーが検索できるページB、詳細ページ、ユーザーが詳細を変更できるページCはユーザーがサブを変更できる場所です詳細などが含まれます。私が別のページに影響を与えずにいくつかのタブでページAを開くことができるようにしたいのであれば、私はAのbean上で会話スコープを使用する必要があります。しかし、私はそれがB CとDの会話範囲にもなると思いますか?私はどこで、いつ会話を始める/終えるべきかについて。つまり、ユーザーは新しいタブを開いてタブを閉じることができます。これを検出して会話を閉じるにはどうしたらいいですか? – bertie