[Struts] html:select indexed indexeert de formbean

Pagina: 1
Acties:

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

Ik ben bezig om dynamisch select boxen the genereren voor elke "user" uit een lijst. Dat werkt allemaal prima en ik kan de lijst met de boxen genereren. Het probleem is dat de verkeerde attribuut wordt geindexeerd.
Dit is wat ik heb gedaan om dynamisch de select boxen te genereren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<c:forEach var="listItem" items="${formbean.userList}" >
            <tr>
              <td><bean:write name="listItem" property="user.firstname"/> <bean:write name="listItem" property="user.lastname"/></td>
              <td bgcolor="#D4E4F6" >
                  <html:select name="formbean" property="evalId" styleClass="kort170" indexed="true">
                    <option value="1"><bean:message bundle="msg" key="message.activity.eval.niceagain"/></option>
                    <option value="2" selected="selected"><bean:message bundle="msg" key="message.activity.eval.nice"/></option>
                    <option value="3"><bean:message bundle="msg" key="message.activity.eval.notnice"/></option>
                    <option value="4"><bean:message bundle="msg" key="message.activity.eval.absent"/></option>
                </html:select>
             </td>
            </tr>
</c:forEach>

De evalId heb zowel als String[] als List gedeclareerd maar het resulaat bleef hetzelfde:
<select name="hostactivity[0].evalId"...> in html source. Je zou verwachten dat het hostactivity.evalId[0] zet in de html source. Kan iemand mij vertellen waarom de formbean wordt geindexeerd i.p.v. de property?

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 12-03 16:31
misschien moet je de html:option tag gebruiken ipv de normale option tag.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
paulh schreef op woensdag 28 september 2005 @ 13:53:
misschien moet je de html:option tag gebruiken ipv de normale option tag.
Dat heeft niet geholpen. En trouwens dan kan ik het attribuut "selected" niet meer gebruiken.

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 29-04 10:20
je moet multiple attribute op je select box op true zetten.

en euhm, indexed attribute gebruik je als je binnen een lus werkt dacht ik.

[ Voor 47% gewijzigd door Cuball op 28-09-2005 14:15 ]

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


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Cuball schreef op woensdag 28 september 2005 @ 14:12:
je moet multiple attribute op je select box op true zetten.

en euhm, indexed attribute gebruik je als je binnen een lus werkt dacht ik.
1- multiple dient voor selectie van meerdere velden binnen één select box (dat heb ik niet nodig)
2- de <c:for each> is die lus. <logic:iteration> doet ook hetzelfde en krijg ook hetzelfde resultaat eruit. (formbean[0].evalId i.p.v. formbean.evalId[0])

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 29-04 10:20
verkeerd gelezen... Dan is het gedrag van struts toch wel correct denk ik.

Even de handleiding erbij gehaald en daar staat duidelijk:


indexed
Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. [RT Expr]


Ik zou de nested tags gebruiken voor wat jij wil.

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


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

Het werkt nu niet omdat je niet itereerd over een property van je formbean, maar over de userlist. Je zou dit op kunnen lossen door meer in je formbean te zetten.

Dat je het selected attribuut niet kunt gebruiken bij html:option(s) komt omdat deze er automatisch bij wordt gezet wanneer de value van de option gelijk is aan de value van de property in je formbean. Wil je een default waarde geven, dan zul je deze in je formbean moeten zetten ipv in je html.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Janoz schreef op woensdag 28 september 2005 @ 15:16:
Het werkt nu niet omdat je niet itereerd over een property van je formbean, maar over de userlist. Je zou dit op kunnen lossen door meer in je formbean te zetten.

Dat je het selected attribuut niet kunt gebruiken bij html:option(s) komt omdat deze er automatisch bij wordt gezet wanneer de value van de option gelijk is aan de value van de property in je formbean. Wil je een default waarde geven, dan zul je deze in je formbean moeten zetten ipv in je html.
De userList is wel degelijk een property in de formbean. Met de volgende code (die ik nu heb staan i.p.v. de <c:for each>) krijg ik hetzelfde resultaat.
code:
1
<logic:iterate id="lisItem" name="formbean" property="userList">


Maar cuball heeft gelijk over de uitkomst. de index wordt automatisch gezet bij de name attribuut (die meestal de frombean bevat). Wel merkwaardig dus. Ik ga even kijken hoe het zit met nested tags. Alle suggesties zijn nog welkom ;)

Update: Nested tags werken inderdaad. Als ik die gebruik is de uitkomst: <select name="evalId"> en als ik die uitlees dan krijg ik een netjes gevulde String[] met alle geselcteerde waardes. Ik ga nu even ermee spelen met het oorspronkelijk probleem en kijken of ik uit geindexeerd formbean de gegevens eruit kan halen (gewoon uit nieuwsgierigheid). In ieder geval bedankt voor de responses _/-\o_

[ Voor 19% gewijzigd door turkosh op 28-09-2005 17:02 ]

Pagina: 1