2016-12-05 8 views
0

まず、検索ボタンをクリックして特定のクラスの生徒を取得します。私は2つの方法の利用可能なarraylistを持っているので、私はセッションで維持する必要がありますので これを行うには、Excel形式(m1メソッド)とエクスポートPDF形式(m2メソッド)でUIのエクスポートに2つのオプションがありますセッション2つの異なる方法を使用する方法

コード

public class Test extends ActionSupport implements SessionAware { 

    private Map<String, Object> session; 

    public String execute() throws Exception { 

     ArrayList<String> arrayList = // from db 

     return ""; 

    } 

    public String m1() throws Exception { 

     return ""; 

    } 

    public String m2() throws Exception { 

     return ""; 

    } 

    public void setSession(Map session) { 
     this.session = session; 
    } 

} 
+0

*セッションは2つの異なる方法を使用していますか?これらのメソッドはアクションにマッピングされていますか? –

+0

それらのメソッドは別のアクションにマップされています –

+0

あなたが求めているものは不明です。セッション内にコレクションを保持したい場合は、セッション内にデータを入れておくことが重要です。 –

答えて

0

、同じセッション内のユーザーが複数のブラウザタブで同じビューを開き、異なる文脈で言ったビューをレンダリングするシナリオに例えば考えを与えるために、セッションでその重要なの状態を保存しますあなたの場合、異なる検索パラメータ。

1つのオプションは、セッション内でリストを格納するいくつかのGUIDまたは擬似ランダム識別子を使用することです。これにより、異なるブラウザタブからレンダリングされた同じアクションが、異なる結果を異なる識別子で格納することが可能になります。レンダリングされた結果ビューは識別子を格納するだけで、適切なボタンが選択されたときに必ず識別子を提供する必要があります。

ここで心配しているのは、セッションのクリーンアップの仕方になります。結果のリストが不要になったときはいつ知っていますか?その決定するのは簡単ではありません。また、一意のフェッチごとの結果の数に応じて、HTTPセッション内に大きなリストを配置するのは賢明ではありません。理想的には、可能な限りリーンなセッションを維持したいと考えています。

ORMフレームワークを使用している場合は、L2キャッシュを使用することをお勧めします。 HTTPセッションに結果ストレージを接続するのではなく、L2キャッシュはクエリ結果をキャッシュする方法を提供します。ここでの利点は、異なるセッションで同じクエリが実行されると、互いに利益を得ることです。

L2キャッシュを使用すると、ユーザのセッションに関連する操作が不要になります。輸出と検索の方法はほぼ同じです。どちらもクエリを実行しますが、ディスプレイからの結果はL2キャッシュに残っているため、キャッシュをエクスポートする呼び出しはキャッシュから引き出されます。

ORMを使用していない場合でも、ehcacheを直接使用して、特定のクエリに関連付けられた結果を管理し、データベースに先立ってキャッシュに問い合わせることができます。

関連する問題