2012-03-06 25 views
4

NetBeans 6.9でJSF 2.0プロジェクトを作成しました。私はCDIを使い始めています。スコープを追加しようとしたときにプロジェクトを作成した後、ビュースコープが存在しないことに気付きました。私はそれが対話の範囲であり、ビューの範囲が同じものを参照していることを知りたいですか?ビュースコープの代わりに会話スコープを使用できますか?いいえの場合は、どのようにCDIでビュースコープを使用できますか?私はシームが解決策であることも知っていましたが、どうすればシームをネットビーンズで使うことができますか?シームのためのnetbeansプラグインはありますか? seam-3JSF 2.0でCDIの場合のビュースコープの使用方法

ありがとうございました

答えて

10

CDIの表示範囲はありません。会話のスコープは同じではありません。ビューのスコープ付きBeanは、同じビューで作業し、ページの部分的または完全なリロードを繰り返している限り存続します。

CDIの会話範囲を使用する場合は、アプリケーションで会話の始めと終わりを設定する必要があります。

私の経験から、CDIスコープとJSFのビュースコープ(CDIスコープはセッションBeanとアプリケーションBean、JSFビュースコープは必要な場所で使用できます)を使用できます。

UPDATE: ただし、CDI BeanにManagad Beanを挿入することはできません。それ以外の方法で作業します。それはより一般的なケースです(より広い範囲からより狭い範囲に注入する)。

+0

あなたは、ビューのスコープが必要な場合、@namedの代わりに@managedBeanを使用します。 @managedBeanではCDIスコープを使用できます。たとえば、@ManagedBean(name = "businessAddUpdate") - > @ ViewScoped - > @ conversationScope-> public class .....のようになります。 ** - >次の行を意味する**それは? – Basit

+0

同じクラスの注釈に両方を混在させないでください。どちらか一方。また、正しいクラスをインポートするように注意してください。 –

+1

今、私は理解しました。ビューのスコープが必要な場合は、@ManagedBean(JSf)を使用しますが、リクエストまたはセッションまたは会話スコープが必要な場合は、 '@Named(CDI)'を使用します。 Beanは一度に1つのスコープにしか存在できないためです。それは...ですか? – Basit

0

あなたのクラスパスにseam3 facesモジュールを入れるか、または@ViewAccessScpoed myfaces CODIの注釈を使用するだけです。

+1

CODIはエッジケースも処理する、より良い@ViewScopedアダプタを備えています。 AFAIKはDeltaSpikeでも使用されています。 –

+0

@Dar、そうです、DeltaSpike用のjsfモジュールは大きく開発されており、CODIとシーム開発者が一緒にやっているため、素晴らしいモジュールになります;) – Heidarzadeh

関連する問題