PDA

View Full Version : [Jakarta Struts] Help con particolari form e radio button


The_Dave
07-08-2008, 10:19
salve a tutti, devo sviluppare un'applicazione web, utilizzando il framework Struts. Sto anche usando Struts-Layout che mi aiuta con la parte view, ma ho un problema: vorrei riempire i campi di un form in maniera particolare, con i radio button, ma nn ci riesco. Ho postato un'immagine per far capire meglio il problema. In pratica, nel "Caso 1" c'è il classico form visibile in una pagina web, in cui l'utente riempe i campi a mano, e poi nel momento in cui clicca sul tasto "Submit", il form attiva la action a cui è attaccato, riempendo l'ActionForm a cui è attaccata la Action richiamata. Nel secondo caso, ho un elenco di campi gia compilati, e con un radio button scelgo quello che mi interessa. Cliccando poi sul tasto submit, viene invocata la action che ovviamente ha un ActionForm attaccato, uguale a quello nel caso 1, e quindi deve avere anche in questo caso i campi riempiti con Nome, Cognome, Indirizzo e Telefono. Il problema è: come si fa il secondo caso? Evidentemente il problema sta nell'utilizzo del radio button, che non so utilizzare a dovere.
Questo esempio è una semplificazione del mio problema, in realta è un po' piu complicato, ma se riuscissi a fare questo, probabilmente risolverei il mio problema.
L'immagine è la seguente:
http://img227.imageshack.us/img227/6607/formgp3.jpg

ally
07-08-2008, 10:51
...esempio di utilizzo di un radio button...il form è chiaramente il ReportMultimediaForm...i bean message servono per l'intrenazionalizzazione...non farci caso...


<tr>
<td width="200"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2"> <bean:message key="label.form.searchcondition" /> </font>
</td>
<td><html:select name="ReportMultimediaForm" property="idCondition" style="width: 300px;">
<html:option value="">
<bean:message key="label.combo.default.condition" />
</html:option>
<html:option value="1">
<bean:message key="label.combo.default.morevideo" />
</html:option>
<html:option value="2">
<bean:message key="label.combo.default.lessvideo" />
</html:option>
<html:option value="3">
<bean:message key="label.combo.default.moreaudio" />
</html:option>
<html:option value="4">
<bean:message key="label.combo.default.lessaudio" />
</html:option>
<html:option value="7">
<bean:message key="label.combo.default.moregame" />
</html:option>
<html:option value="8">
<bean:message key="label.combo.default.lessgame" />
</html:option>
<html:option value="5">
<bean:message key="label.combo.default.notpresent" />
</html:option>
<html:option value="6">
<bean:message key="label.combo.default.beaver" />
</html:option>
</html:select></td>
</tr>


...ho usato una String nell'action form...


/**
* @return Returns the conditionId.
*/
public String getIdCondition() {
return idCondition;
}
/**
* @param conditionId The conditionId to set.
*/
public void setIdCondition(String idCondition) {
this.idCondition = idCondition;
}


...poi una volta ripescato il form nell'action il dato si comporta in maniera normalissima...

...ciao...

The_Dave
08-08-2008, 09:05
scusami, ma con questo sistema nell'actionForm setti solo l'attributo idCondition... A me interessa invece che tramite la scelta del radio button, viene riempito l'actionForm in tutti i suoi campi, come ad esempio, nel caso che ho citato, tramite il radio button il devo riempire nell'ActionForm i campi Nome, Cognome, Telefono e Indirizzo...
Mi spiego meglio: nel caso1, io riempo a mano i campi del form, e poi quando catturo l'actionForm nella Action, ho a disposizione i quattro attributi del form. Voglio che succeda la stessa cosa anche nel caso2, mentre con la tua soluzione, io ho un actionForm con un solo attributo...

cmq grazie per la risposta!!! è un sollievo trovare qualcuno che sappia di cosa sto parlando, sono alla prima esperienza nel campo dello sviluppo di web application, e mi sento un po' spaesato...

ally
08-08-2008, 09:13
...mh...ok...quindi il form (lato pagina) è già alimentato...a seconda del radio button scelto l'action form si alimenta di conseguenza giusto?...

...ciao...

The_Dave
08-08-2008, 09:38
...mh...ok...quindi il form (lato pagina) è già alimentato...a seconda del radio button scelto l'action form si alimenta di conseguenza giusto?...

...ciao...

esatto!! infatti io avevo gia utilizzato il radio button in quel modo, la difficolta è proprio nel riempire tutti i campi del form...

ally
08-08-2008, 10:03
...le strade sono due...o crei un form con tanti array quanti sono le variabili di una singola colonna e in base al radio button selezionato prendi l'elemento di ogni array specifico...oppure intervieni alimentando l'action form tramite javascript dopo il submit...

...ciao...

The_Dave
08-08-2008, 10:22
...le strade sono due...o crei un form con tanti array quanti sono le variabili di una singola colonna e in base al radio button selezionato prendi l'elemento di ogni array specifico...oppure intervieni alimentando l'action form tramite javascript dopo il submit...

...ciao...

la prima idea nn è utilizzabile, dato che la lista è dinamica... la seconda.. beh, a parte che nn conosco javascript, ma cmq sei sicuro che nn c'è un'altra strada? mi sembra strano che non posso impostare gli attributi del form, come se riempissi a mano i campi?
Cioè, in fondo la differenza è che nel primo caso, i campi sono vuoti e devono essere riempiti, nel secondo caso, i campi sono gia impostati, e devo scegliere solo quale mi interessa... un po' come un menu a tendina, ma multiplo :)
P.S. cmq se volessi farlo con javascript, come si fa???

ally
08-08-2008, 10:41
la prima idea nn è utilizzabile, dato che la lista è dinamica... la seconda.. beh, a parte che nn conosco javascript, ma cmq sei sicuro che nn c'è un'altra strada? mi sembra strano che non posso impostare gli attributi del form, come se riempissi a mano i campi?
Cioè, in fondo la differenza è che nel primo caso, i campi sono vuoti e devono essere riempiti, nel secondo caso, i campi sono gia impostati, e devo scegliere solo quale mi interessa... un po' come un menu a tendina, ma multiplo :)
P.S. cmq se volessi farlo con javascript, come si fa???

...io opterei per la prima strada...posti in sessione una lista di n elementi pari alle opzioni...esegui un iterate sull'oggetto e crei dinamicamente l'elenco di form disponibili indipendentemente dal loro numero...

...ciao...

ally
08-08-2008, 10:52
//opzioni è un arrayList di un oggettone avente caratteristche pari al formBean alimentato con tanti oggetti quante sono le opzioni
<logic:present name="opzioni">
<logic:iterate id="opzioni" name="opzioni">
<td><bean:write name="opzioni" property="nome"/></td>
<td><bean:write name="opzioni" property="cognome"/></td>
<td><bean:write name="opzioni" property="indirizzo"/></td>
<td><bean:write name="opzioni" property="telefono"/></td>
<html:select name="IlTuoForm" property="condizione">
<html:option value="<bean:write name="opzioni" property="numeroCondizione"/>"></html:option>
</logic:iterate>
</logic:present>



...grosso modo una cosina così...

...ciao...

The_Dave
08-08-2008, 11:05
//opzioni è un arrayList di un oggettone avente caratteristche pari al formBean alimentato con tanti oggetti quante sono le opzioni
<logic:present name="opzioni">
<logic:iterate id="opzioni" name="opzioni">
<td><bean:write name="opzioni" property="nome"/></td>
<td><bean:write name="opzioni" property="cognome"/></td>
<td><bean:write name="opzioni" property="indirizzo"/></td>
<td><bean:write name="opzioni" property="telefono"/></td>
<html:select name="IlTuoForm" property="condizione">
<html:option value="<bean:write name="opzioni" property="numeroCondizione"/>"></html:option>
</logic:iterate>
</logic:present>



...grosso modo una cosina così...

...ciao...
allora, ci stiamo avvicinando al mio problema: infatti io ho una lista di utenti in sessione, e voglio selezionarne uno... l'actionForm è praticamente identico agli oggetti che compongono la lista, solo che mentre gli oggetti Utente implementano Serializable, l'actionForm ovviamente estende ActionForm di struts. Quello che fai tu è praticamente quello che faccio io al momento: hai una lista, la stampi, e con il radio button ti porti dietro il numero che indica l'indice dell'utente. Il problema è che in questo modo, nella action devi accedere di nuovo alla lista per avere le restanti informazioni dell'utente selezionato...

ally
08-08-2008, 11:07
allora, ci stiamo avvicinando al mio problema: infatti io ho una lista di utenti in sessione, e voglio selezionarne uno... l'actionForm è praticamente identico agli oggetti che compongono la lista, solo che mentre gli oggetti Utente implementano Serializable, l'actionForm ovviamente estende ActionForm di struts. Quello che fai tu è praticamente quello che faccio io al momento: hai una lista, la stampi, e con il radio button ti porti dietro il numero che indica l'indice dell'utente. Il problema è che in questo modo, nella action devi accedere di nuovo alla lista per avere le restanti informazioni dell'utente selezionato...

...cosa che hai automaticamente se l'oggetto è stato messo in sessione :


request.getSession().getAttribute("opzioni");


...o che hai implicitamente se assegni al radio button un valore pari all'id dell'utente selezionato...

...ciao...

The_Dave
08-08-2008, 11:11
ma cosi nn è risolto veramente il problema... mi resta cmq un form riempito solo di un campo, nel tuo caso "numeroCondizione", che poi mi permette di trovare l'opzione, cercandola nella lista "opzioni" che si trova in sessione...

ally
08-08-2008, 11:31
ma cosi nn è risolto veramente il problema... mi resta cmq un form riempito solo di un campo, nel tuo caso "numeroCondizione", che poi mi permette di trovare l'opzione, cercandola nella lista "opzioni" che si trova in sessione...

...perchè scusa?...l'iterate puoi ampliarlo inserendo textField alimentati in base all'elemento estratto dall'array...quindi avresti tanti form alimentati quanti sono i dati contentui nell'array..


<html:text property="nome" value="<bean:write name="opzioni" property="nome"/>" ></html:text>


...ciao...

The_Dave
08-08-2008, 11:38
...perchè scusa?...l'iterate puoi ampliarlo inserendo textField alimentati in base all'elemento estratto dall'array...quindi avresti tanti form alimentati quanti sono i dati contentui nell'array..


<html:text property="nome" value="<bean:write name="opzioni" property="nome"/>" ></html:text>


...ciao...

ho provato, ma nn funziona...
a parte che il codice value="<bean:write name="opzioni" property="nome"/>" nn funziona (è cmq risolvibile con value="${opzioni.nome}"), ma il fatto è che non mi riempie il form con i valori selezionati, dato che viene riempito con i valori del primo oggetto visto dall'iteratore.

ally
08-08-2008, 11:43
...purtroppo non ho modo di controllare il codice...

...ma questo non crea una serie di righe con valori pari ai diversi oggetti caricati nell'arrayList?...


//opzioni è un arrayList di un oggettone avente caratteristche pari al formBean alimentato con tanti oggetti quante sono le opzioni
<logic:present name="opzioni">
<logic:iterate id="opzioni" name="opzioni">
<td><bean:write name="opzioni" property="nome"/></td>
<td><bean:write name="opzioni" property="cognome"/></td>
<td><bean:write name="opzioni" property="indirizzo"/></td>
<td><bean:write name="opzioni" property="telefono"/></td>
<html:select name="IlTuoForm" property="condizione">
<html:option value="<bean:write name="opzioni" property="numeroCondizione"/>"></html:option>
</logic:iterate>
</logic:present>

The_Dave
08-08-2008, 11:49
...purtroppo non ho modo di controllare il codice...

...ma questo non crea una serie di righe con valori pari ai diversi oggetti caricati nell'arrayList?...


//opzioni è un arrayList di un oggettone avente caratteristche pari al formBean alimentato con tanti oggetti quante sono le opzioni
<logic:present name="opzioni">
<logic:iterate id="opzioni" name="opzioni">
<td><bean:write name="opzioni" property="nome"/></td>
<td><bean:write name="opzioni" property="cognome"/></td>
<td><bean:write name="opzioni" property="indirizzo"/></td>
<td><bean:write name="opzioni" property="telefono"/></td>
<html:select name="IlTuoForm" property="condizione">
<html:option value="<bean:write name="opzioni" property="numeroCondizione"/>"></html:option>
</logic:iterate>
</logic:present>

a parte il codice value="<bean:write name="opzioni" property="numeroCondizione"/>" che nn funziona, si, visualizza la lista come previsto. Il problema è che non mi riempie i campi del form con gli attributi dell'oggetto selezionato... siamo sempre lì :)
senti cmq grazie veramente per l'aiuto!!! mi stai dando molto piu ascolto tu su un forum, che il mio tutor qui in azienda!!

ally
08-08-2008, 12:34
a parte il codice value="<bean:write name="opzioni" property="numeroCondizione"/>" che nn funziona, si, visualizza la lista come previsto. Il problema è che non mi riempie i campi del form con gli attributi dell'oggetto selezionato... siamo sempre lì :)
senti cmq grazie veramente per l'aiuto!!! mi stai dando molto piu ascolto tu su un forum, che il mio tutor qui in azienda!!

...scusa è che ora non ho proprio modo di testare il codice...a mio avviso la strada dell'iterate dovrebbe comunque essere corretta...

...ciao...