2016-12-05 58 views
0

首先,我要通過單擊搜索按鈕來獲取某個班級的學生,這樣生病的學生就會列出一個列表。那麼我有兩個選項在Excel導出爲Excel格式(m1方法)和導出爲pdf格式(m2方法)來做到這一點 這樣arraylist我必須保持會話,因爲我已經提供了用於這兩種方法的arraylist如何使用會話兩種不同的方法

代碼

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

你是什麼意思*使用會話兩種不同的方法*?這些方法是否映射到操作?亞歷山大, –

+0

。這些方法被映射到不同的行動 –

+0

你不明白你在問什麼。如果你想在會話中保留一個集合,然後把它放在會話中,那麼在會話中保留大量數據會產生影響。 –

回答

0

當會話存儲狀態,它的重要,因爲在同一個會話內的用戶打開多個瀏覽器標籤相同的觀點,並呈現給思想情景說,鑑於不同的環境中,如不同的搜索參數如果你的情況。

一個選項可能是使用一些GUID或僞隨機標識符,您將該列表存儲在會話中。這將允許從不同瀏覽器選項卡呈現的相同動作以不同的標識符存儲不同的結果。渲染的結果視圖只需要存儲標識符並確保在選擇適當的按鈕時提供標識符。

這裏的問題變成了如何清理會話,又如何知道何時不再需要結果列表?它不容易確定。另外,取決於每次唯一獲取的結果數量,它將大型列表放置在HTTP會話中是不明智的。理想情況下,您希望保持儘可能精簡的會話。

如果您使用的是ORM框架,我建議您考慮使用L2高速緩存。 L2緩存可以提供緩存查詢結果的方式,而不是試圖將結果存儲器限制在HTTP會話中。這樣做的好處是,如果不同的會話運行相同的查詢,它們會相互受益。

使用L2緩存時,您的操作不再需要關注用戶的會話。導出和搜索的方法幾乎完全相同。他們都會運行查詢,但是想法是顯示的結果仍然會在L2緩存中,因此調用導出它們會從緩存中取出。

即使您沒有使用ORM,仍然可以直接使用ehcache,管理與給定查詢關聯的結果並在數據庫之前諮詢緩存。

相關問題