Archief - AJAX: [DWR] Forms zonder refresh

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Catscratch

Legacy Member
Ik ben vorige week begonnen als consultant op een nieuw bedrijf. Ik ben momenteel wachtende op een project, dus ze vroegen of ik in de tussentijd een Java ontwikkelomgeving kon opzetten voor interne projecten. Wat ze graag hadden: oa Struts, Hibernate en DWR.

Momenteel draait alles, maar bij het ontwikkelen van een test programma zit ik even vast. Stel je even een heel simpele webpagina voor met 2 divjes. Links vinden we de personeelslijst en wanneer we iemand aanklikken krijgen we rechts een editformpje. Makkelijk toch?

Hoe kan ik de rechtse div vullen met een formpje zonder dat de hele pagina refresht?

Via DWR kan ik wel een java methode schrijven die een String teruggeeft met allerhande HTML tags voor het opbouwen van een form. Maar is het net niet de bedoeling van een MVC architectuur om logica duidelijk van presentatie te scheiden? HTML laten returnen serverside vind ik ongelooflijk vies. Via DWR kan ik ook geen actionclass gebruiken/aanspreken die op zijn beurt forward naar een jsp.

Een andere mogelijkheid is een iframe rechts te plaatsen, maar ik denk dan wel dat ik tegen de regels van de kunst zondig ... ;)

Een laatste mogelijkheid zou zijn om DWR te laten vallen (alleszins voor dit probleem), en gewoon 'manueel' een xmlhttprequest vuren (of een wrapper te gebruiken zoals tw-sack). Maar wordt dan mijn (gegenereerde) javascript ook niet ongeldig daar alles in de innerHTML van de div wordt gegooid? Hoe kan ik dan m'n save ajax call vuren?

Hoe los ik dit probleem volgens de regels van de kunst?

Bedankt!

servi

Legacy Member
Ik denk dat ik je vraag grotendeels begrijp, dus hier is een poging om een ietwat deftig antwoord te geven.


- Het is inderdaad de bedoeling van MVC dat je in je Controller en Model geen code steekt die de layout bepaalt.
- Vermits je niet de volledige pagina wil refreshen lijkt me inderdaad AJAX de beste oplossing.

De manier waarop ik het zou doen is als volgt :

Wanneer je klikt op een persoon doe je een AJAX-request naar de server met de vraag naar de gegevens voor die persoon. Het antwoord stuur je terug in een gestructureerde vorm, bijvoorbeeld als volgt:

Code:
<persoon>
  <voornaam>Jan</voornaam>
  <familienaam>Peeters</familienaam>
  <geboortedatum>
    <jaar>1985</jaar>
    <maand>11</maand>
    <dag>28</dag
  </geboortedatum>
</persoon>


Nu moet je dit natuurlijk nog in je form krijgen. Wat ik zou doen is gewoon die form al van begin af aan mee in de pagina steken en deze form pas zichtbaar maken zodra je op een persoon klikt.

Je vult de form dan in aan de hand het antwoord dat je van de server gekregen hebt.


Dus even kort samengevat :
1. klikken op persoon
2. AJAX-aanvraag aan server
3. XML-gestructureerde antwoord van de server
4. form zichtbaar maken
5. gegevens van form invullen door het XML-gestructureerd antwoord te parsen

Catscratch

Legacy Member
Sorry voor de late reply :)

Een bruikbare oplossing! Maar volgens mij moet het iets makkelijker kunnen.

Het principe van het Struts framework (of een stuk ervan) is gewoon een actieklasse (Model) forward naar een JSP (View). Maar via DWR (ajax framework) wist ik niet hoe ik een actieklasse kon aanspreken. Nu ondertussen heb ik dit wel gevonden hoe ik dat wel kan.

De respons van de ajax call is dan gewoon uwe form in HTML, die je kan pasten in de innerHTML van een div'ke ofzo. Probleem is wel dat de javascript voor validatie enzo al van te voren ook in de basis pagina moet zitten.

Allez ik heb nu web applicatie'ke dat met refreshes werkt (liever 10kb een keer meer refreshen dan een pagina van 200kb inladen), en ajax gebruikt voor sommige validaties waarvoor een db-connectie vereist is.

Maar ik ben nog van plan om 'full' ajax forms te maken .... ik ga een paar manieren afwegen, ook da van u alleszins :)

Het framework hier moet dienen om oa pas afgestudeerde mensen interne projecten te laten ontwikkelen. En dan wil ik toch zo'n clean mogelijk voorbeeld maken.

Indien interesse kan je hier ook nog even kijken: http://gathering.tweakers.net/forum/list_messages/1228801 :)

WHiSPy

Legacy Member
Bij struts laat je gewoon best 'n included jsp-pagina refreshen. Dus als forward in je struts-config.xml die jsp-pagina die included is als target. Works like a charm bij ons op 't werk. :)

Catscratch

Legacy Member
WHiSPy zei:
Bij struts laat je gewoon best 'n included jsp-pagina refreshen. Dus als forward in je struts-config.xml die jsp-pagina die included is als target. Works like a charm bij ons op 't werk. :)

Maar om je included pagina te refreshen moet je toch ook je 'skeletpagina' refreshen, aangezien het om een server side include gaat? Of zijn we over Struts 2 bezig met geïntegreerde Ajax support?

Wat ik nu wou doen:

1. Skeletpagina met Javascript functies klaar voor forms die geladen worden via Ajax.
2. Pagina vuurt Ajax request naar een Struts mapping.
3. Actieklasse forwardt naar JSP ... hetgeen in die JSP staat is uwe respons en wordt gepast in de innerHTML van ne div.

Maar 't is den nog de vraag dat ik events gekoppeld aan bv input elementen nog moet gaan evallen ... alleszins geen voorbeeldige manier van werken.

WHiSPy

Legacy Member
Wij gebruiken gewoon struts 1.2.8 in samenwerking met jquery. Buiten die included jsp staat er gewoon 'n div die we laten refreshen met als content de nieuwe webpagina. Je gaat dan forwarden naar die jsp die eigenlijk de nieuwe content is van die div die opnieuw geladen moet worden.

Resultaat: geen screen refresh en toch nieuwe content. ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan