2011-03-09 4 views
1

Struts 2アプリケーションで複数のリクエストにわたってオブジェクトを永続化する必要があります。オブジェクトをSessionに入れたり、Struts 2のValue Stackで維持する方が良いでしょうか?セッションの永続性とバリュー・スタックのメンテナンスの違い

したがって、セッション内のオブジェクトを永続させてから値のスタックにオブジェクトを維持することと、実際の違い(パフォーマンスなど)はありますか?

1)セッション

mutableSDO = getSession().get(SESSION_OBJ_IDENTIFIER); 

// manipulate object 

getSession().put(SESSION_OBJ_IDENTIFIER, mutableSDO); 

2)S2アプリケーション、セッション、要求において

<s:property name="mutableDTO"/> 
... 

// mutableDTO instance variable set by Struts 2, value from client submit action 

// mainpulate mutableDTO 

this.mutableDTO = changedDTO; 

// jsp uses changed DTO 
... 
<s:property name="mutableDTO"/> 
+0

「バリュースタック」とは何ですか? –

+0

Struts 2バリュースタック。 – Nick

答えて

4

値スタックに維持し、パラメータはすべての部分値スタックです。

リクエストスコープはデフォルトで公開されていますが、他のスコープにアクセスするには#が必要です。

アトリビュートの先頭に#を付けると、アトリビュートが見つかるまで表示された順番で前述のスコープにアクセスします。 #scope_name.attrで必要なスコープを明示的に検索する必要があるスコープのスタックに、同じ名前の複数の属性が表示されます。

オプション1とオプション2の間です。オプション1のみが複数のリクエスト(実際にはセッションを維持するすべてのリクエスト)にわたって存続します。 2つ目は、1つの要求ではなく、いつでも値を維持し、1つの要求から次の要求へとバブリングします。最初は、アプリケーション内の任意のページに無作為に行き、保存された値にアクセスできるようにします。第2のページは、正しいページに転送するかどうかによって異なります。

従業員のテーブルに値を設定し、その従業員の詳細ページに移動する場合は、従業員IDを要求スコープにする必要があります。 emp_idを何度も使用する必要がある場合でも、セッションスコープには含めないでください。したがって、連鎖してデータを手元に置いている場合、これは正しい方法です。

ユーザーの好みがある場合は、バックグラウンドの色です。グループやすべてのページで使用されるため、これはセッション値に入れるのがよいでしょう。

ユーザーが複数のウィンドウを開いてリフレッシュボタンを押した場合、サイトは期待どおりに動作しますか?ユーザーが複数の従業員の詳細ウィンドウを開いたとします。値がgetパラメータ(要求スコープ内にある)として渡されるのではなくセッション値としてロードされた場合、ユーザーは最新の状態になって各ウィンドウの最新の従業員データを確認します最後にセッションにロードされた従業員。

+0

説明をありがとう! – Nick

関連する問題