0

問題がありますが、何を見ればよいか正確にはわかりません。私はこの問題を抱えている最初の人ではないと思います!

JSF & Co、基本フレームワークを備えた Java SE アプリケーションです。

アプリケーションは、スレッドにコメントを送信できます。コメントを書いてから別のスレッド (別のブラウザ タブ) を開くと、新しく開いたスレッドにコメントが投稿されます。

「selectedThread」属性を持つ ManagedBean があります。このエラーは、プロパティが新しいものに置き換えられたために発生します。この問題を解決するにはどうすればよいですか?

私はいくつかのアイデアを持っていますが、すべて同じ問題を引き起こします。

ありがとうございました!


@ManagedBean
@SessionScoped
public class ViewBean {



private Thread selectedThread = new Thread(); //Current opened Threas
private String threadId=""; //ThreadId read out from Database by Id convert to Object
private Comment selectedThreadComment = new Comment(); //Comment to be made

作業/失敗の手順:

  1. 開く:thread_detail.xhtml?id=10
  2. ThreadId と選択した Trip が設定されました
  3. コメントを書く (selectedThreadComment を設定)
  4. 開く:thread_detail.xhtml?id=11
  5. コメントをコミット

ID 10 ではなく ID 11 のコメントが永続化されていることは理解できます。

どのスコープを使用してもかまいません。開いているサイトに応じて、コメントを保存する方法が必要です。

私の問題がより明確に定義されていることを願っています!

4

1 に答える 1

0

管理対象Beanの範囲が、保持するデータに対して広すぎるように聞こえます。症状は、管理対象Beanがセッションスコープに配置されているのに対し、管理対象Beanが保持するデータは単一のHTTP要求または単一のビューに固有であることを示しています。セッションスコープのマネージドBeanインスタンスは、ブラウザセッションが確立されている限り存続します。同じセッション内のすべてのリクエスト/ビューで共有されます。1つのウィンドウ/タブによって開始された変更は、同じセッションの別のウィンドウ/タブに反映されます。

次に、Beanがリクエストまたはビュースコープのデータのみを保持している場合は、代わりにリクエストまたはビュースコープにBeanを配置する必要があります。ログインしたユーザーなど、セッションスコープに確実に保持する必要のあるデータがある場合は、現在のセッションスコープのマネージドBeanをそれぞれ適切なスコープの2つのマネージドBeanに分割する必要があります。次に、セッションスコープのものを使用して、ログインしたユーザーを表すデータを保持し、要求/ビュースコープのものを使用して、送信されたフォームデータおよび/またはビュー状態を表すデータを保持します。を使用@ManagedPropertyして、セッションスコープのものをリクエスト/ビュースコープのものに挿入できます。

参照:

于 2012-08-12T18:06:27.963 に答える