[JAVA] Sping MVC JSTL: binden van items uit een Set

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bille
  • Registratie: Mei 2000
  • Laatst online: 16-08 14:37

bille

Don't call me Buff

Topicstarter
Ik wil een pagina maken waarop ik een complex class (Client bean met associatie naar een set van Address beans) kan editten. Dus op 1 pagina wil ik de eigenschappen van Client kunnen aanpassen als mede de properties van ieder adres dat in de Set van Addresses zit van de betreffende client.

ik heb een paar bean classes alsvolgt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
@Entity
class Client {
@OneToMany(fetch=Fetchtype.EAGER, cascade = {CascadeType.ALL})
private Set<Address> addresses
// not wat meer props e.d.
// usual getters en setters
}

@entity
class Address {
private String street;
// usual setters / getters
}


nu heb ik een SimpleFormController (inhoud niet zo belangrijk, command class = Client.class) en een jsp pagina met jstl:

in eerste instantie dacht ik zoiets als:
XML:
1
2
3
4
5
6
7
<%@ taglib prefix ="c" url=".../jstl/core"%>
<form>
<c:foreach var="address" items="${addresses}">
<input type=text name="address.street" value="${address.street}"/>
</c:foreach>
<button type="submit">submit</submit>
</form>


maar goed, als je naar de POST data kijkt dan zie je al snel dat er geen mogenlijkheid is bij 2 addresses dat er nog een goeie binding plaats kan vinden in de controller (formdata bevat dan namelijk 2 keer de input met de zelfde name prop). Dus ging ik ff zoeken en kwam dit tegen: http://mattfleming.com/node/134

Als ik de aangegeven oplossing implementeer ongeveer zoiets als:
XML:
1
2
3
4
5
6
7
<%@ taglib prefix ="c" url=".../jstl/core"%>
<form>
<c:foreach var="address" items="${addresses}" varStatus="addressRow">
<input type=text name="address[${addressRow.index}].street" value="${address.street}"/>
</c:foreach>
<button type="submit">submit</submit>
</form>


resultaat is dan dat er op zich een logische POST formt on submit. Namelijk de index die wordt bijgehouden door de jstl taglib zorgt voor unieke namen. Maar helaas resolven die namen niet goed, het probleem daarmee is dat ik een SET heb een niet een LIST en dus geen geindexeerde items. maw de (pseudo) aanroep: Client.addresses[index] is niet mogelijk.

Wat ik me nu dus afvraag en ik kan er eigenlijk niet echt iets over vinden in de Spring MVC reference: hoe bind ik items uit een SET met JSTL op zo'n manier dat de Spring controller de items weer terug populeert in de set nadat de data gesubmit is?

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


Acties:
  • 0 Henk 'm!

  • Ilantir
  • Registratie: Februari 2008
  • Laatst online: 03-02 01:41
Nu is het zo dat binnen JSP werken met Collections sowiezo niet lekker werkt (alleen java.util.Map wordt fatsoenlijk ondersteunt).

Het simpelste is de Set omzetten in een List (liefst aan de achterkant), dan is het probleem gewoon opgelost. De vraag is ook of JSP een vereiste is voor jouw vraagstuk of gewoon een eigen keuze? Ik zie wel dat je zoiets moderns gebruikt als persistence/hibernate maar vervolgens wel een vorige generatie front end tech. Ik zie hier trouwens weinig Spring aan, waar zit dat?

Acties:
  • 0 Henk 'm!

Verwijderd

Ilantir schreef op vrijdag 20 juni 2008 @ 13:04:
Nu is het zo dat binnen JSP werken met Collections sowiezo niet lekker werkt (alleen java.util.Map wordt fatsoenlijk ondersteunt).
Collections binnen jsp's worden prima ondersteund. Wat mis je dan?

Acties:
  • 0 Henk 'm!

  • Ilantir
  • Registratie: Februari 2008
  • Laatst online: 03-02 01:41
Verwijderd schreef op vrijdag 20 juni 2008 @ 13:12:
[...]
Collections binnen jsp's worden prima ondersteund. Wat mis je dan?
Tis meer een gevalletje van wat is optimaal? Je ziet toch vooral vanuit EL dat Maps een grote voorkeur genieten.
Overigens ben ik verwend dat ik voornamelijk met JSF mag werken, wat toch een behoorlijke verbetering is ;) maar laten we niet off-topic gaan.

[ Voor 4% gewijzigd door Ilantir op 20-06-2008 16:04 ]


Acties:
  • 0 Henk 'm!

  • bille
  • Registratie: Mei 2000
  • Laatst online: 16-08 14:37

bille

Don't call me Buff

Topicstarter
Ilantir schreef op vrijdag 20 juni 2008 @ 13:04:Ik zie wel dat je zoiets moderns gebruikt als persistence/hibernate maar vervolgens wel een vorige generatie front end tech. Ik zie hier trouwens weinig Spring aan, waar zit dat?
De JSP met JSTL is een Spring View in een Spring MVC webapp. Om de view te populeren wordt een Spring Controller gebruikt en de view wordt automagisch adhv een Spring model gepopuleerd. Wat wellicht verwarrend is, dat ik in het voorbeeld geen Spring taglib heb gebruikt.

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies