Newsgroup: it.comp.java
Titolo: Struts e form da interrogazione

Salve a tutti
sto cercando di utilizzare Struts e mi sono imbattuto in un problema
riguardante le form:
la form che devo riempire non ha un numero di campi prestabilito ma deve
cambiare in base al numero
di righe presenti in una tabella di un database.
In pratica per ogni riga di tale tabella, devo generare un <input type=text>
diverso per inserirvi un valore
Come posso risolvere visto che le form bean prevedono che io scriva un
numero finito di get/set ???
GRAZIE

 GRAZIE
prego
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

O ancor meglio col tag <c:forEach> delle JSTL


ovvero?
con iterate, credo, riesco a fare un ciclo che mi crea
per ogni riga della tabella (il cui campo che mi interessa è il nome di una
CITTA', o comune o località)
<input type="text" name="roma" value="">
<input type="text" name="milano" value="">
<input type="text" name="napoli" value="">
ma poi con la ActionForm come faccio? non posso avere setRoma e getRoma,
bisogno di qualcosa di dinamico (non intendo DynamicForm)
Mi puoi dare qualche dettaglio in più???

 ha scritto nel messaggio 
news:d8m6qv$b7i$1...@balena.cs.interbusiness.it...

io finora ho usato i tag nested.
Prima definsco il mio actionform con un campo collection, e i vari metodi 
get/set.
poi nella jsp faccio così:
<nested:form action="..">
    <nested:iterate property="collection">
        <nested:text property="myProperty" indexed="true"/>
...
che genera
<input type="text" name="myProperty[0]" value="dcsfsadf"/>
<input type="text" name="myProperty[1]" value="dcsfsadf"/>
<input type="text" name="myProperty[2]" value="dcsfsadf"/>
...
nota però che la collection deve restituire un bean con una proprietà 
myProperty e non una stringa semplice!
Voi fate diversamente? (mi piacerebbe consocere altri approcci) 

 O ancor meglio col tag <c:forEach> delle JSTL
Si nel progetto corrente lo stiamo usando
e mi ci trovo bene
ciao Nicola


 Mi puoi dare qualche dettaglio in più???
I campi <html:text> e gli altri del form devono avere la proprietà 
indexed="true". Ciò ti crea una pagina con i nomi campi form 
indicizzati, e struts è in grado di collegarli ad una proprietà del form 
(solitamente un DynaActionForm) indicizzata.

 Mi puoi dare qualche dettaglio in più???
Infatti avrai set e getTuaCollection
Poi per accedere al contenuto usi i suoi (della Collection) metodi che
poi sono gli speculari della jsp (ti crei
l'Iterate...hasNext...next...bla bla bla)




Ma i tag hatml, essendo dei normali html:text, con name="roma", "napoli"
ecc, come faranno ad interagire automaticamente con la collection della
form...
Se mi fate un breve esempio forse capisco meglio
Grazie

http://struts.apache.org/userGuide/struts-logic.html#iterate
Comunque devi fare qualcosa del tipo
<logic:iterate id="elementoCollection" name="nomedeltuoform"
property="nomedelmetodogetterperlaCollection" >
<tr>
<html:text indexed="true" name="elementoCollection"
property="metodogetterdiunaproprietadellelemento" />
</tr>									
</logic:iterate>

 ha scritto nel messaggio 
news:1118849776.2...@g43g2000cwa.googlegroups.com...

nessuno usa mai i tag nested?? 

ok, grazie....
ora ho un altro problema, all'inizio dicevo che per ogni città ho un valore,
adesso, per ogni città devo associare 3 stringhe
la cosa si complica perchè la collection veniva bene per fare la coppia
(citta, stringa), ma desso che ne devo associare 3 come faccio??
leggendo in giro, o meglio su
http://struts.apache.org/userGuide/building_controller.html
ho visto che si riesce a farsi restituire un oggetto e poi interrogarlo con
la sintassi dei bean: in pratica viene contenitore[1].label
e mi funziona, ma come la mettiamo con il SET ???
In pratica sulla form mi ritrovo ad avere (i campi hanno questi nomi: citta,
prima, seconda, terza)
....
<input type="text" name="riga[2].citta" value="roma" />
<input type="text" name="riga[2].prima" value="stringa numero uno" />
<input type="text" name="riga[2].seconda" value="questa è la due" />
<input type="text" name="riga[2].terza" value="qui abbiamo tre" />
<input type="text" name="riga[3].citta" value="milano" />
<input type="text" name="riga[3].prima" value="stringa numero 1" />
<input type="text" name="riga[3].seconda" value="questa è la 2" />
<input type="text" name="riga[3].terza" value="qui abbiamo 3" />
....
ma struts cosa proverà ad invocare a questo punto per popolare la ActionForm
(predendoli cioè dalla request)????
Questi sono i metodi della mi action form dove OreStraBean è un bean con i
metodi getCitta(), setCitta(String), getPrima(), setSeconda(String) ecc...
  public OreStraBean getRiga(int index) {
    return (OreStraBean)v.get(index);
  }
  public void setRiga(int index, Object obj) {
    v.add(index, obj);
  }
ma quando submitto la pagina per andare ad un altra in cui vorrei mostrare i
dati dati della form appena confermata, ottengo un errore della
BeanUtils.populate, per la precisione un ArrayIndexOutOfBound per la
posizione 1
cercando di fare getRiga(). A me torna che dia errore proprio perchè non c'è
stato alcun setRiga (verificato in debug che tale chiamata non avviene mai)
Ma allora, ripeto la domanda, che metodo chiama struts per riempire le form
(ovvero cosa invoca della form-bean per passargli i parametri presi dalla
request) ?????
Spero di essere stato chiaro....
Aiutatemi, c'ho perso un sacco di tempo, non voglio buttare via tutto!
Grazie
