2012-03-22 18 views
1

私は非常に奇妙な状況があります。私は多くのバグのある非常に大きなJavaアプリケーションに取り組んでいます。私はこれを今日見つけました。セッションatrributeにリストがありません

方法が長すぎるため、コードを投稿せずに状況を説明しようとしていますが、特定の問題を特定して特定しました。ここにあります:

コントローラクラスにセッション属性が設定されています。この属性にはいくつかのフィールド、いくつかのString、いくつかのint、あるオブジェクトタイプのArrayListがあります。それは、次のように設定されている:

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, beanList); 

は、その後、私は、この属性を読む必要が別のコントローラクラスがあり、それはこのように書きます:コントローラは、適切なキャストを持つ属性を(取得

request.getSession().getAttribute(Constants.SESSION_LIST_SEARCH); 

)文字列とintフィールドはありますが、ArrayListは空です。

それはこのように書きますので、私は、「クローン」何が起こったのかを見るためにリストしようとした絶望の行為ではので、私は答えを見つけることができませんでした:この回避策は、トリックを行い

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, beanList); 
/* Desperate developer */ 
ArrayList<ActivityBean> duplicatedList = new ArrayList<ActivityBean>(); 
for(ActivityBean foo:beanList.getActivityBean()){ 
    duplicatedList.add(foo); 
} 
request.getSession().setAttribute("duplicatedList",duplicatedList); 

今(セッションから正しく "duplicatedList"というBeanを読むことはできますが、元のBeanがある時点でArrayListを失っても、他のフィールドは維持されているようには思えません。それは私がそれをから削除されたことを期待nullだった場合 - あなたはそれがnullが、空ではないことを言ったので、どこか他のアプリケーションでは、いくつかのコードは、(Listを変更しているようだ、事前

+0

はbeanList詳細コードを表示します。 benaListを無効にするか、セッションから取り除くかのどちらかです。 – fmucar

+0

他のいくつかのコードがbeanListと同じオブジェクトへの参照をどこかに持っていて、それがリスト属性を無効にしたり空にしているようです。 – GriffeyDog

答えて

0

感謝コードの他の部分によって文脈が全くない)。たぶんListを文脈に置いた後、いくつかのコードはまだ参照を保持し、それを操作しますか?

あなたは次の操作を実行しようとすることができます:

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, Collections.unmodifiableList(beanList)); 
+0

ありがとう、私は今日これを試してみる、今日私はオフィスにいないよ – CocheLee

+0

私はこれを試して、魅力的に働いた! unmodifiableListのようなメソッドがあったのを知りませんでした。コレクションについてもう少し読んでください。どうもありがとう! – CocheLee

+0

歓迎します;) –

関連する問題