[ tiranin @ 13.11.2007. 08:59 ] @
Imam npr. klasu Redovi, koja u sebi ima Vector sa oko 100 elemenata.
Hoću da kroz JSP ispišem 20-ak redova(po svakom elementu vectora jedan red), pa sa linkovima next, previous i sl. gledam sledećih, prethodnih 20 ...
Ako imam:
Code:

<% jsp:useBean id="redovi" class="Redovi" scope="session" %>

to mogu lako, onda se konstruktor klase Redovi poziva kada mi prvi put zatreba i lako posle odrađujem navigaciju kroz Vector.

Međutim, kada odem na neke druge stranice iz moje JSP aplikacije, onda mi na serveru ostane da čuči instanca klase Redovi, jer session jos uvek traje. Pošto mi aplikacija ima mnogo takvih izveštaja moze da dođe do zagušenja.

Ako stavim scope="request" ili "page" onda mi prilikom svakog prelaska na sledećih 20 ili prethodnih 20, ponovo se poziva konstruktor,što bih hteo da izbegnem.

Kako da elegantno ovo uradim ? Da li da umesto session scope-a stavim oblekat Redovi kao atribut aplikacije, pa da ga tako referenciram ? Deluje mi glupo, ali mi se čini da bi tako proradilo.
Savet, mišljenje ?
[ debeli brka @ 13.11.2007. 11:22 ] @
Mislim da ne mozes da postavljas atribute aplikacije, jer jsp sistem nema 'aplikaciju', kod svih sistema ovog tipa (za web strane) ti imas proces koji se pokrece kad korisnik zatrazi stranu, i koji se gasi kada isporuci tu stranu. Promenljive koje se na serveru cuvaju kao npr session, se cuvaju trajno, ali ne znam da li tu mozes da stavis nesto kao static?

Interesantno pitanje, u svakom slucaju.
[ logotet @ 13.11.2007. 16:30 ] @
Nagađam da bi to moglo da se uradi ovako:

U JSP-u koji ti predstavlja jedan izveštaj imaš
Code:
<% jsp:useBean id="redovi" class="RedoviPrvogIzvestaja" scope="session" %>

a u JSPu za drugi izveštaj
Code:
<% jsp:useBean id="redovi" class="RedoviDrugogIzvestaja" scope="session" %>
.
Pri čemu klase RedoviPrvogIzvestaja i RedoviDrugogIzvestaja nasleđuju tvoju klasu Redovi.
(Nadam se do sada da sam dobro razumeo problem).
Mislim, nisam 100% siguran, da ime(id) bean-a "redovi" može da bude aktivno samo po jednoj instanci, jer se valjda iz ServletContexta može dobiti sa getValue("redovi"). Nešto nalik na Hashtable.


Prvim pozivanjem stranice sa jednim izveštajem bi, valjda svorilo novu instancu koja bi imala id="redovi".
Ovde se verovatno stvara problem, što dok session traje, nema potrebe za novim instanciranjem, pa bi se dogodilo da ulaziš na stranicu drugog izveštaja, a session ti ima instancu klase za prvi izveštaj.(Uf, što su mi rečenice rogobatne, ali ne umem bolje).

Zato bi, tu je sad ključ moga nagađanja, do te instance trebalo doći prekoServletContexta, pa onda proveriti sa instanceof da li je željena klasa, pa ako nije kreirati je pozivom konstruktora i tako dalje.

Možda da tvoja klasa Redovi bude wrapper oko ovih pojedinačnih klasa izveštaja. što mi se čini još interesantnije, jer uvek ima samo jedna instanca, a u njoj se "smenjuju" željene klase.
Sada kada sam napisao ovo za wrapper, mislim da je zapravo to rešenje, ali me mrzi da brišem prethodni deo poruke, možda i u njoj ima nečeg interesantnog.
U svakom slučaju, javi šta si uradio, mislim da može koristitii ostalima.