Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto action-state ne utice na model u view-statu?

[es] :: Java :: Zasto action-state ne utice na model u view-statu?

[ Pregleda: 825 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.dynamic.dsl.t-2.net.

Sajt: b.flyingoranges.com


+117 Profil

icon Zasto action-state ne utice na model u view-statu?03.07.2009. u 16:00 - pre 181 meseci
Pozdrav svima, imam jedan problem sa Spring WebFlow-om. Tek sam krenuo da ucim pa dosta toga mi nije jasno, i cini mi se da je sledeci problem dosta jednostavno resiv. Koristim WebFlow verziju 2.

Dakle imam jedan view-state koji koristi model.
Code:
<var name="listForm" class="com.xxx.ListForm"/>

<view-state id="display" view=".list" model="listForm">  
        <transition on="edit" to="isEditParamSet" validate="false" bind="false"/>
</view-state>

Tu prikazujem neku listu, svaki element ima jedinstven id. Takodje imam Edit dugme, koje ce da izvrsi "edit" event.

Problem je da je moguce da nijedan element nije izabran, ili da je lista prazna, pa kad korisnik pritisne dugme dobicu prazan id parametar pa nastaju problemi. Zato sam napravio tako da se prvo dodje do decision-state-a gde cu da proverim da li je parametar null.
Code:
<decision-state id="isEditParamSet">
  <if test="requestParameters.selectedItem != null" then="prepareEdit" else="display"/>
</decision-state>

Ako je prazan, onda idi nazad na listu, ako nije onda idi na action-state koji ce da procita podatke iz baze.
Code:
<action-state id="prepareEditIgnore">
   <evaluate expression="mainService.getExistingListItem(requestParameters.selectedItem)" 
                                result="listForm.editedItem"/>
       <transition to="display"/>
</action-state>

"editedItem" je polje u ListFormi koje ce se koristiti da se prikazu osobine elementa.

Dakle, posle ovoga se vracam nazad na "display" view-state, medjutim element je prazan! Takodje, metoda ListForm.setEditedItem() koja je morala biti pozvana kod <evaluate>-a se nije uopste ni pozvana! Tako da, kao da se nista nije ni dogodilo...

Inace, ako <evaluate> stavim direktno u view-state, i pod uslovom da je selectedItem parametar postavljen, onda ce se element bez problema ucitati.

Isto tako, ako postavim <input>-e na pocetak flow-a, i u action-state-u postavim neke vrednosti tih inputa, onda ce se te vrednosti i postaviti. Tj. action-state se zaista izvrsava.

Pa zbog toga imam teoriju da se dogadja sledece:
1. izlazim iz view-state-a, model se serializuje i snimi negde
2. izvrsim decision-state
3. izvrsim action-state, medjutim rezultat ide u neki drugu promenljivu sa istim imenom kao model, ali ne bas u taj isti model koji je prethodno serijalizovan
4. stizem nazad do view-state-a, stari model se uzima od nekud, deserijalizuje se, i koriste se stare vrednosti, tj. kao da se nista nije dogodilo

Ali u svakom slucaju me zanima: kako da postavim vrednost modela u view-state-u?
 
Odgovor na temu

gajo2
Budapest

Član broj: 62614
Poruke: 518
*.i-rose.si.

Sajt: b.flyingoranges.com


+117 Profil

icon Re: Zasto action-state ne utice na model u view-statu?06.07.2009. u 10:02 - pre 181 meseci
Uglavnom resio sam tako sto sam sve akcije koji modifikuju model prebacio u view-state. Zbog ovoga mi se duplira kod, npr. ako imam dva view-statea, jedan za add, a drugi za edit, a oba imaju potpuno iste akcije i sve, onda moram to napisati u dva posebna view-state-a... ali pretpostavljam da je to dobro jer je UML tako korektniji...
 
Odgovor na temu

[es] :: Java :: Zasto action-state ne utice na model u view-statu?

[ Pregleda: 825 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.