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:
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:
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:
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?
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