2016-12-05 5 views
0

Zuerst werde ich Studenten einer bestimmten Klasse holen, indem ich Suchknopf anklicke, damit eine Liste Studenten erhalten. Dann habe ich zwei Optionen in UI-Export im Excel-Format (M1-Methode) und exportieren im PDF-Format (m2-Methode), um dies zu tun , so dass Arraylist ich in Sitzung zu halten, weil ich Arraylist für diese beiden MethodenWie man Sitzung zwei verschiedene Methoden benutzt

haben

-Code

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

Was meinst du * Session zwei verschiedene Methoden verwenden *? Sind diese Methoden den Aktionen zugeordnet? –

+0

Ya. diese Methoden sind verschiedenen Aktionen zugeordnet –

+0

Es ist unklar, was Sie fragen. Wenn Sie eine Sammlung in der Sitzung aufbewahren möchten, fügen Sie sie in die Sitzung ein, wobei der Vorbehalt besteht, dass ginormous Datenblobs in der Sitzung Auswirkungen haben können. –

Antwort

0

Wenn Zustand in der Sitzung zu speichern, sein wichtigen Gedanken Szenarien zu geben, wo ein Benutzer innerhalb der gleichen Sitzung die gleichen Ansicht in mehr Browsern-Tabs geöffnet und macht mit unterschiedlichen Kontexten der Ansicht, zB verschiedene Suchparameter für Ihren Fall.

Eine Option könnte die Verwendung einer GUID oder einer Pseudozufallskennung sein, unter der Sie die Liste in der Sitzung speichern. Dies würde ermöglichen, dass dieselbe Aktion, die von verschiedenen Browser-Registerkarten gerendert wird, die unterschiedlichen Ergebnisse mit unterschiedlichen Kennungen speichert. In der gerenderten Ergebnisansicht muss nur der Bezeichner gespeichert werden, und Sie müssen diesen angeben, wenn die entsprechende Schaltfläche ausgewählt wurde.

Die Sorge hier ist, wie die Sitzung zu bereinigen, aka wann wissen wir, wenn diese Liste der Ergebnisse nicht mehr benötigt wird? Es ist nicht einfach zu bestimmen. Abhängig von der Anzahl der Ergebnisse pro einmaligem Abruf ist es unklug, große Listen innerhalb einer HTTP-Sitzung zu platzieren. Idealerweise möchten Sie solche Sitzungen so schlank wie möglich halten.

Sollten Sie ein ORM-Framework verwenden, würde ich Ihnen empfehlen, die Verwendung von L2-Caches in Betracht zu ziehen. Anstatt zu versuchen, den Ergebnisspeicher auf die HTTP-Sitzung zu schärfen, bietet der L2-Cache eine Möglichkeit zum Zwischenspeichern von Abfrageergebnissen. Der Vorteil hier ist, dass wenn verschiedene Sitzungen die gleiche Abfrage ausführen, sie einander profitieren.

Wenn Sie den L2-Cache verwenden, müssen Sie sich nicht mehr um die Sitzung des Benutzers kümmern. Die Methoden für den Export und die Suche wären nahezu identisch. Sie würden beide die Abfrage ausführen, aber die Idee ist, dass die Ergebnisse von der Anzeige immer noch im L2-Cache wären, daher würde der Aufruf, sie zu exportieren, aus dem Cache gezogen werden.

Auch wenn Sie kein ORM verwenden, können Sie die Verwendung von ehcache direkt nutzen, die mit einer bestimmten Abfrage verknüpften Ergebnisse verwalten und den Cache vor der Datenbank abfragen.

Verwandte Themen