[Struts] gebruik van 2 actions(mappings)

Pagina: 1
Acties:

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Hoi allemaal,

Ik heb een vraag over het volgende:

De JSP pagina's waarmee wij werken hebben voor de header/body/footer elk een aparte JSP. Nu zijn alle formulieren e.d. in de body gedeelte vertegenwoordigd, dus alle actions/forms/mappings zijn daarop gebaseerd.
Nou moet er in de footer gedeelte ook wat "informatie" opgenomen worden in de vorm van een nieuws kolom. En die moet voor elke soort gebruiker aangepaste informatie tonen (en in de toekomst zelfs enquete mogelijkheden bieden).
Ik kan wel de velden (en acties) die nodig zijn voor de footer in de bestaande actions en forms zetten, maar met het oog op onderhoud lijkt dat een hels karwei te worden.
Ik heb al een eigen form en een eigen action gedefineerd voor de velden die de nieuws kolom aangaan. Maar hoe kan ik tijdens het laden van de pagina's ook deze action in werking laten treden.
Dus tijdens het uitvoeren van bijv. /laadpagina.do ook /laadfooter.do wordt uitgevoerd.

Verwijderd

Okee niet echt een antwoord op je vraag maar;
Als het informatie is die voor een footer pagina specifiek is, zou ik het dus niet in de footer opnemen. Verder zou je eens kunnen kijken wat je met Tiles kunt (onderdeel van struts) of met, wat mij betreft een gelantere oplossing, Sitemesh.

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

momania

iPhone 30! Bam!

De gegevens die je nodig hebt om in je footer te tonen moet je juist niet met een aparte action verzamelen. Die gegevens verzamel je gewoon met een delegate/static method/whatever.

Eventueel kan je bijvoorbeeld je RequestProcessor zo aanpassen, dat bij elk verzoek deze data geladen wordt. Je kan de method 'processActionperform' overriden en daar, na de execute van je action, de benodigde footer gegevens verzamelen en deze in de request plaatsen.

Andere optie om het wel in een aparte action te doen, is gewoon de actions te 'chainen'. Dus na je '/laadpagina.do' via een forward de '/laadfooter.do' aanroepen. Alleen zal je dan wel in je '/laadfooter.do' moeten weten waar je naar moet forwarden en zal je dus parameters mee moeten geven oid van de '/laadpagina.do' naar de '/laadfooter.do'

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


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Het enig werkende resultaat heb ik geboekt door de action die nodig is voor het vullen van nieuws kolom niet als struts action te declareren maar als een normale klasse die de struts action parameters accepteert. Daarin zet ik dan de gevulde form van nieuws kolom in de session.
Ik vraag mij af met chain actions of het gevulde form voor de body (/laadpagina.do) nog wel beschikbaar blijft als ik de andere action (/laadfooter.do) ook heb uitgevoerd.

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

momania

iPhone 30! Bam!

turkosh schreef op maandag 17 oktober 2005 @ 12:14:
Het enig werkende resultaat heb ik geboekt door de action die nodig is voor het vullen van nieuws kolom niet als struts action te declareren maar als een normale klasse die de struts action parameters accepteert. Daarin zet ik dan de gevulde form van nieuws kolom in de session.
Ik vraag mij af met chain actions of het gevulde form voor de body (/laadpagina.do) nog wel beschikbaar blijft als ik de andere action (/laadfooter.do) ook heb uitgevoerd.
Dan moet je niet de Form misbruiken om data op je scherm te tonen ;)
Gewoon een footer object or whatever in de request plaatsen en die netjes uitlezen in je jsp :)

Forms hoor je eigenlijk alleen maar te gebruiken als html form en dus als input ;)

[edit]
Als je chained blijven beide forms trouwens beschikbaar gedurende de request. Dus zolang je geen redirect doet, moet dat prima lukken :)

[ Voor 9% gewijzigd door momania op 17-10-2005 12:28 ]

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


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 21-04 16:24
Ik zou een base form + base action maken met daarin de velden van je footer en die in de execute methode van je base action inladen en dan de gevraagde actie verder afhandelen...

er zijn wel verschillende mogelijkheden hiervoor te vinden... zou ook lukken adhv een filter

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


  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

Als je gebruik maakt van Tiles kun je in je tiles-def opgeven dat er altijd nog een action moet worden uitgevoerd, onafhankelijk van de action die leidt naar die pagina.
Dit doe je met controllerUrl

Bijvoorbeeld:
code:
1
2
3
4
5
6
<definition name="welcomeTile" controllerUrl="/prepareNews.do">
    <put name="title" value="Welkom"></put>
    <put name="header"  value="/WEB-INF/jsp/header.jsp"></put>
    <put name="body"  value="/WEB-INF/jsp/welcome.jsp"></put>
    <put name="footer" value="/WEB-INF/jsp/news.jsp"/>
</definition>

In je action die achter de actionMapping welcome.do ligt doe je je dingen om op de welcome page te tonen. In de action achter prepareNews.do verzamel je het nieuws en zet je op een eigen Form.
In de news.jsp gebruik je die newsForm.

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Verwijderd

bartware schreef op maandag 17 oktober 2005 @ 17:36:
Als je gebruik maakt van Tiles kun je in je tiles-def opgeven dat er altijd nog een action moet worden uitgevoerd, onafhankelijk van de action die leidt naar die pagina.
Dit doe je met controllerUrl

Bijvoorbeeld:
code:
1
2
3
4
5
6
<definition name="welcomeTile" controllerUrl="/prepareNews.do">
    <put name="title" value="Welkom"></put>
    <put name="header"  value="/WEB-INF/jsp/header.jsp"></put>
    <put name="body"  value="/WEB-INF/jsp/welcome.jsp"></put>
    <put name="footer" value="/WEB-INF/jsp/news.jsp"/>
</definition>

In je action die achter de actionMapping welcome.do ligt doe je je dingen om op de welcome page te tonen. In de action achter prepareNews.do verzamel je het nieuws en zet je op een eigen Form.
In de news.jsp gebruik je die newsForm.
alweer een onbekende feature leren kennen, van harte bedankt!!!
Dit is wel een veel mooiere oplossing dan de eigen taglibs die ik schrijf voor veelvoorkomende tiles die toch hun eigen code nodig hebben...

Eneuhm, wat zijn dan de parameters voor die action, krijgt die de tiles parameters of ook de parameters van de af te handelen request?
En wat gebeurt er met de return ActionMapping? Wordt die genegeerd of wordt die ook gerendered?

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

momania

iPhone 30! Bam!

Verwijderd schreef op dinsdag 18 oktober 2005 @ 08:24:
[...]

Eneuhm, wat zijn dan de parameters voor die action, krijgt die de tiles parameters of ook de parameters van de af te handelen request?
En wat gebeurt er met de return ActionMapping? Wordt die genegeerd of wordt die ook gerendered?
ff in de docs kijken he ;)

http://struts.apache.org/...les/ActionController.html

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


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
De tiles oplossing heb ik als volgt aangepakt:

In de body JSP waar de footer met include wordt toegevoegd gewijzigd naar:
code:
1
<tiles:insert page="footer.jsp" controllerClass="struts.util.NewsController"/>

Dit werkt op hetzelfde manier als het opgeven van de head/body/foot in de tiles.tld
Die controller heeft een standaard execute methode die automatisch wordt aangeroepen.

Dus ik hoef in de actions niet meer expliciet de action voor de nieuws meer aan te roepen. Thanx _/-\o_
Pagina: 1