Newsgroup: it.comp.java
Titolo: Domanda JSTL

Ciao a tutti,
avrei necessità in una pagina JSP di accedere ad alcune chiavi di una 
hashtable, le cui chiavi (sono delle stringhe) sono tutte identiche, a 
meno di un indice. Ad esempio:
KEY  | VALUE
tel1 | 12345678
tel2 | 87654321
tel3 | 13579246
tel4 | 24680135
Nella pagina JSP devo stampare questi 4 valori in 4 righe di una 
tabella tutte uguali, per cui avevo pensato di fare un forEach...il 
problema è che non so come accedere in modo semplice alle 4 chiavi 
all'interno del forEach...la mia idea era fare qualcosa del tipo (la 
variabile che contiene la Hashtable si chiama "station"):
<c:forEach var="i" begin="1" end="4">
  <tr>
     <td>Numero di telefono <c:out value="${i}" /></td>
     <td><input type="text" name="tel<c:out value='${i}' />" 
value="<c:out value='${ 
station.tel
${i} }'/>" size="15" 
maxlength="15"></td>
  </tr>
</c:forEach>
Purtoppo però, come prevedibile, il costrutto "${ 
station.tel
${i} }" 
non è utilizzabile...esiste qualcosa che permetta di fare ciò che mi 
serve? Costruire una chiave di una hashtable dinamicamente ed accedere 
ai campi della hashtable in un for...
Alternativamente potrei costruire anche una hashtable in cui le chiavi 
sono semplicemente i numeri da 1 a 4, però anche in questo modo dovrei 
utilizzare qualcosa tipo "station.${i}" (utilizzo questa sintassi ben 
sapendo che è errata, ma è giusto per rendere l'idea id cosa mi 
servirebbe).
Se qualcuno ha soluzioni su come farla sono ben accette! Intanto grazie 
mille a tutti in anticipo!!!

ciao!
prova a usare queste due istruzioni:
<c:set var="chiave" value="tel${i}"/>
<c:out value="${station[chiave]}"/>
spero ti funzioni!!

stefanomnn laid this down on his screen :

Funziona!!! Grazie mille!!! Anche se accedere ad una hashtable come se 
fosse un array è inconsueto... ò_O Comunque ora funziona, è questo 
l'importante! :)
Grazie ancora!

Non è inconsueto,
è inconsueta la notazione ^_^ rispetto al piu popolare "."
l'operatore [] serve a posta per poterci mettere dentro variabili!
sono contento di averti aiutato.
Stefano
Elvandar ha scritto:



Bè, sì, l'operatore [] lo conosco, però non l'avevo mai utilizzato nel 
caso di una hashtable! Appunto perchè sapevo che in jstl accedevi alle 
chiavi di una hashtable tramite il "." :) Comunque ora so una cosa in 
più! :)


  <body>
    <h3>JSTL Example:</h3>
    <jsp:scriptlet>
    <![CDATA[
    Map<String, Integer> m = new HashMap<String, Integer>();
    m.put("tel2", new Integer(1234));
    m.put("tel1", new Integer(4321));
    request.setAttribute("myMap", m);
    ]]>
    </jsp:scriptlet>
       <table border="1">
        <c:forEach var="element" items="${myMap}">
            <tr><td>${element.key}</td><td>${element.value}</td></tr>
        </c:forEach>
    </table>
  </body>
Ti ho dato l'esempio in sintassi JSP xml quindi il file dovrebbe
chiamarsi esempio.jspx
Altrimenti trasformalo pure in sintassi jsp classica con <% etc e
senza
<jsp:output omit-xml-declaration="true" />


Anche la tua soluzione è ottima, però purtoppo non applicabile nel mio 
caso, perchè come ogni volta che viene utilizzata una 
Hashtable/HashMap, non puoi garantire l'ordinamento dei dati, cosa per 
me indispensabile (i numeri di telefono devono essere visualizzati in 
ordine dal primo all'ultimo preservando anche eventuali locazioni 
vuote...).
Grazie comunque della risposta!!! :)

Elvandar ha scritto:

In questo caso non devi utilizzare una HashMap ma una TreeMap che ti 
garantisce l'ordinamento delle chiavi.
Andrea