[JAVA/Struts] Httpsessie beheer

Pagina: 1
Acties:

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 28-11 14:44
Ik had graag eens geweten wat jullie doen om de HttpSession zo klein mogelijk te houden? Wat bij ons nu veelal (bijna altijd) gedaan wordt is onze objecten uit gemak van werken in een Struts ActionForm te plaatsen die zich in Session scope bevindt.

Op zich kan dat geen kwaad, maar na verloop van tijd hebben we dat er in de Form verschillende Objecten komen te zitten die dan bv ook nog eens volledige lijsten kunnen bevatten...

bv:
Java:
1
2
3
4
5
class Account {
 Person person;
 List transactions;
 Bank bank;
}


Als we nu een scherm hebben waar we een Account kunnen wijzigen, we plaatsten dan het Account ojbect op een ActionForm in sessionscope, op deze manier kan je overal gemakkelijk aan de verschillende properties van een Account (account.person.address.street etc). Ook de eigenschappen van een Bank kunnen gemakkelijk wijzigen en benaderen.

Bij dit heb ik het gevoel dat we al teveel in sessie gaan plaatsten, maar ik zie niet direct een andere oplossing. Het probleem met request scope is dat je telkens je een actie gaat uitvoeren alles moet gaan submiten, maar als ik bv een een persoon zijn naam wijzig dan moeten alle properties van Bank en alle transacties ook terug op een of andere manier gesubmit worden... dit lijkt me echt niet haalbaar...

hoe gaan jullie met dergelijke problemen om ?

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • momania
  • Registratie: Mei 2000
  • Laatst online: 05:21

momania

iPhone 30! Bam!

Cuball schreef op woensdag 24 januari 2007 @ 09:43:
Het probleem met request scope is dat je telkens je een actie gaat uitvoeren alles moet gaan submiten, maar als ik bv een een persoon zijn naam wijzig dan moeten alle properties van Bank en alle transacties ook terug op een of andere manier gesubmit worden... dit lijkt me echt niet haalbaar...
Je misbruikt nu dus een Form om data vast te houden voor scherm opbouw, terwijl deze juist is om gegevens op te slaan die gesubmit worden ;)

Je kan je data gewoon in de request zetten. Een account dat je edit, daarvan laat je alleen het id terug submitten (met natuurlijk de velden die editable waren op dat scherm) in je form. Zodra je submit haal je gewoon op basis van id die account weer uit de database en update je de juiste properties.
Als je dat in de sessie laat staan, weet je uberhaupt al nooit of je met een up-to-date object werkt.

Gebruik je trouwens wel Hibernate bv? Want dan is het helemaal ook niet erg om zo'n object met referenties naar andere objecten/lijsten in je request te zetten, aangezien die laxy geladen worden. :)

Neem je whisky mee, is het te weinig... *zucht*


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

De standaard scope voor een ActionForm is de session scope. Maar je wil natuurlijk niet alles in je sessie proppen, tenzij het om een relatief kleine applicatie gaat. Wat je kan doen is om je scope voor je actions op request niveau definiëren en zelf de state voor de belangrijke objecten (enkel de POJO vorm) bijhouden in een sessie of een eigen context.

Als je er dan voor zorgt dat je aan de hand van een ID of een unieke handle (vb com.package.Object:32) je parameter submit, kan je deze in de request altijd opnieuw ophalen en populeren. Zelfs als je een locking strategy gebruikt, kan dit een zinnig gebruik zijn; maar dan moet je wel telkens je version attribuut meegeven in je form.