2

私は興味があります CDIを使用するときにAJAXでJSFページを使用する適切な方法は何ですか。CDI Bean の構成をテストし@SessionScopedましたが、AJAX に問題があることがわかりました。

で構成された CDI Bean で AJAX を使用するのは適切@ConversationScopedですか?

conversation.begin();そして、セッションが完了したときに必要なBean コンストラクターとconversation.end();Java メソッドに入れなければならないことがわかりました。どういうわけかこれを自動的に行うことはできますか?

PS ユーザーがページを閉じたときに、このコードを使用してリソースを自動的に解放できますか?

@Remove
public void finishIt(){
     conversation.end();
}
4

2 に答える 2

4

conversation.begin();そして、Beanコンストラクターとconversation.end();Javaメソッドを入力する必要があることがわかりました。これは、セッションが完了したときに実行する必要があります。

そのとおりです。具体的なコード例については、特にJSF 2.0/2.1で@ManagedBean/@ViewScopeをCDIに置き換える方法も参照してください。

どういうわけかこれを自動的に行うことはできますか?

単一のビューでポストバッキングしている限り存続しなければならないBeanが必要な場合は、少なくともJSF2.2にアップグレードしてください。箱から出して互換性のあるCDIを提供@ViewScopedします。

ただし、ビューで参照している限り存続する必要があるBeanが必要な場合は、座っているビューに関係なく、代わり@ViewAccessScopedDeltaSpikeの使用を検討してください。Beanを参照していないビューに移動すると、そのビューは破棄されます。

参照:

于 2013-03-15T12:13:16.943 に答える
1

デフォルトでは、Conversationオブジェクトは一時的な状態です。beginメソッドを呼び出すと、実行時間の長いものとしてマークされます(実際の会話が開始されたとき)。会話を終了すると(endメソッドを呼び出すことにより)、会話オブジェクトが一時的なものとしてマークされます。

一時的な会話スコープのBeanは、単一のリクエストのライフサイクルの間存続します。

ロングエンドの会話(conversation.beginによって開始)は、conversation.endが呼び出されない限り実行されます。

于 2013-03-15T12:14:46.283 に答える