 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
filp Guest
|
Posted: Tue Sep 20, 2005 12:10 pm Post subject: Struts: problema con ActionForm e validazione |
|
|
Ciao a tutti.
Ho cominciato da poco a studiare il framework Struts. Spero che possiate
aiutarmi perché la vedo buia
Il mio problema: devo raccogliere in una pagina una serie di link che
rimandano a delle opportune azioni; ad esempio "login", "iscrizione",
"vediListaItem", ecc.
Ho pensato di utilizzare come Action la LookupDispatchAction (lo so ,è
una scelta strana, infatti non ne sono sicuro), così ci metto tutti
pulsanti submit che mi selezionano il metodo giusto da eseguire. Il
metodo funziona se non c'è validazione, ma se provo ad attivare la
validazione dei campi username/password ogni volta che faccio un'azione
diversa del login il DynaValidatorForm mi impedisce di proseguire perché
giustamente vede che i campi username/pwd sono vuoti; ma io non voglio
riempirli se mi iscrivo!!
Una soluzione è usare il pulsante cancel per l'iscrizione che mi
permette di saltare la validazione. Ok, ma se mi serve ancora un'altro
cancel? Potrei anche usarne un altro, ma a quel punto Struts non
riconosce più la funzione cancel! (documentato in
[url]http://struts.apache.org/userGuide/struts-html.html#cancel)[/url].
Potrei risolvere con DispatchAction? (anche se significa per me
riscrivere daccapo tutte le action che ho fatto; mi ci ero affezionato,
almeno finché funzionavano).
Come posso fare quindi a selezionare tutta una serie di azioni senza
incappare in validazione di campi che in quel momento non servono?
Grazie.
|
|
| Back to top |
|
 |
Alex Guest
|
Posted: Tue Sep 20, 2005 8:36 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
Ora non ricordo bene i dettagli di come l'avevo implementata, però
anch'io ho avuto un problema simile e anzichè utlizzare la normale
classe validator, ne avevo scritta una ereditando da questa che non
faceva altro che controllare nel metodo (se non ricordo male
validate(..)) se un campo preso per convenzione e sempre presente sui
form per i quali volevo poter attivare/disattivare la validazione...
In breve:
nella jsp:
<form action="xxxx">
<campo hidden id="da_validare" value="true">
</form>
nel metodo validate (non ricordo la sintassi - la invento):
if (DynaForm.Item("da_validare").equals("true"))
super.validate();
return true;
Spero di essere stato abbastanza chiaro
|
|
| Back to top |
|
 |
Alex Guest
|
Posted: Tue Sep 20, 2005 8:39 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
PS: Dimenticavo...
ovviamente con javaScript in base al tasto che effettua la submit puoi
cambiare il valore del campo hidden!!!
|
|
| Back to top |
|
 |
filp Guest
|
Posted: Wed Sep 21, 2005 9:59 am Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
Grazie per la risposta!
Però voglio evitare del tutto l'uso di Javascript perché non voglio fare
affidamento sul client per nessuna funzione del server (e poi perché lo
dovrei studiare da zero).
Sto leggendo ora qualcosa a proposito della disabilitazione selettiva
delle regole di validazione del framework Validator in base all'azione
da svolgere, ma per me è tutto da vedere...
|
|
| Back to top |
|
 |
Alex Guest
|
Posted: Wed Sep 21, 2005 11:36 am Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
filp ha scritto:
| Quote: | Grazie per la risposta!
Però voglio evitare del tutto l'uso di Javascript perché non voglio fare
affidamento sul client per nessuna funzione del server (e poi perché lo
dovrei studiare da zero).
Sto leggendo ora qualcosa a proposito della disabilitazione selettiva
delle regole di validazione del framework Validator in base all'azione
da svolgere, ma per me è tutto da vedere...
|
Beh allora anzichè il campo hidden che determina la validazione in
ogni metodo validate anzichè tale campo controlli il campo che indica
l'azione (ce l'hai vero?)
ovvero, in brevissimo:
metodo validate()
if (form.hidden_azione.equals("inserisci") ||
tutte_le_azioni_che_vuoi)
super.validate();
return true;
|
|
| Back to top |
|
 |
Alex Guest
|
Posted: Wed Sep 21, 2005 12:26 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
Scusa stai usando LookupDispatchAction, ti ho detto una ca...a
ultima soluzione:
imposta validate=false
nei metodi dell'action che necessitano validazione chiami il metodo
validate dell'oggetto ActionForm che ti viene passato come parametro...
Spero funzioni... ciao
|
|
| Back to top |
|
 |
filp Guest
|
Posted: Wed Sep 21, 2005 3:59 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
Alex ha scritto:
| Quote: | Scusa stai usando LookupDispatchAction, ti ho detto una ca...a
ultima soluzione:
imposta validate=false
nei metodi dell'action che necessitano validazione chiami il metodo
validate dell'oggetto ActionForm che ti viene passato come parametro...
Spero funzioni... ciao
Uhm, per adesso ho rimandato il problema ad una pagina successiva che |
devo costruire ancora. Intanto ho risolto rinunciando alla
LookupDispatch e usando tante action quante sono le operazioni (tedioso,
ma efficace).
Pensando alla tua soluzione, mi pare che possa andare, anche se di fatto
si rimescola la sequenza ordinaria del controller: cioè l'originale
sarebbe (tagliando..)
- ActionForm: creazione(o riutilizzo), popolamento, _validazione_
- creazione ActionErrors (eventuali) e rinvio della request
- _se tutto è andato bene_ invocazione Action associata alla request.
- forward finale
Tu dici di fare:
- ActionForm: creazione, popolamento.
- invocazione Action
- invocazione validate()
- e qui la procedura non è più standard; forse il Form ritorna in
maniera corretta la request con dentro gli ActionErrors se ci sono
errori; se non ci sono errori la palla a chi passa? Forse richiama
ActionForward tutto da solo e prosegue con una request senza errori.
Boh, per allestire la prova mi ci vorrà un pò di tempo...
Grazie ancora per l'interessamento, ciao!
P.S.
A proposito, io sto andando avanti dall'inizio con ActionMessages perché
ActionError è deprecato, ed anche saveErrors(request, _ActionErrors_).
Fino ad ora ha funzionato con html:messages ma non so se andando avanti
potrei avere problemi, tu ne sai niente?
|
|
| Back to top |
|
 |
Alex Guest
|
Posted: Thu Sep 22, 2005 7:56 am Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
| Quote: | - ActionForm: creazione, popolamento.
- invocazione Action
- invocazione validate()
- e qui la procedura non è più standard; forse il Form ritorna in
maniera corretta la request con dentro gli ActionErrors se ci sono
errori; se non ci sono errori la palla a chi passa? Forse richiama
ActionForward tutto da solo e prosegue con una request senza errori.
Boh, per allestire la prova mi ci vorrà un pò di tempo...
|
Non ho capito cosa vuoi dire, cmq la sequenza è:
ActionForward metodo(mapping, form, request, response){
ActionMessages am=validate(mapping, request);
String dove_vado="success";
if (am!=null){
saveErrors(request, am);
dove_vado="solitamente_la_pagina_col_form";
}
return mapping.findForward(dove_vado);
}
| Quote: |
Grazie ancora per l'interessamento, ciao!
P.S.
A proposito, io sto andando avanti dall'inizio con ActionMessages perché
ActionError è deprecato, ed anche saveErrors(request, _ActionErrors_).
Fino ad ora ha funzionato con html:messages ma non so se andando avanti
potrei avere problemi, tu ne sai niente?
|
java.lang.Object
| Quote: |
+--org.apache.struts.action.ActionMessages
+--org.apache.struts.action.ActionErrors |
Non dovresti avere problemi in quanto ActionErrors eredita da
ActionMessages... poi sicuramente tu utilizzi saveErrors(request,
_ActionMessages_)
|
|
| Back to top |
|
 |
filp Guest
|
Posted: Thu Sep 22, 2005 11:25 am Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
| Quote: | Non ho capito cosa vuoi dire, cmq la sequenza è:
ActionForward metodo(mapping, form, request, response){
ActionMessages am=validate(mapping, request);
String dove_vado="success";
if (am!=null){
saveErrors(request, am);
dove_vado="solitamente_la_pagina_col_form";
}
return mapping.findForward(dove_vado);
}
|
ok, il codice funziona. Però in realtà mi si presenta un altro strano
problema: non posso impostare "validate" a false perché per qualche
motivo il form me lo sottomette automaticamente appena carica la pagina;
quindi invia un parametro "method" (per la lookup) vuoto perché il campo
non ho fatto nemmeno in tempo a vederlo e struts solleva l'eccezione che
non trova il metodo giusto (ovviamente).
Ho provato così tanto per vedere con "validate" a true , trascurando il
fatto che in pratica valida due volte, una da solo e una nel codice che
scrivo io, e mi pare che possa andare (il codice); però è inutile se
validate non lo posso mettere a false (cioè si ripresenta il problema
dell'impossibilità di disabilitare la validazione).
Proprio per il motivo che dicevo sopra se validate è true quando carico
la pagina già il validator mi mostra gli errori dei campi che sono
vuoti, anche se in effetti li vedo per la prima volta.
| Quote: |
java.lang.Object
|
+--org.apache.struts.action.ActionMessages
|
+--org.apache.struts.action.ActionErrors
Non dovresti avere problemi in quanto ActionErrors eredita da
ActionMessages... poi sicuramente tu utilizzi saveErrors(request,
_ActionMessages_)
|
Ebbene, non so cosa ho toccato, ma non riesco più a vedere i messaggi
ActionMessages. Il tag html:messages non li mostra, eppure guardando gli
oggetti in scope request c'è tutto quello che ci dovrebbe essere, cioè
ad esempio, nel caso di password diverse ho in memoria:
org.apache.struts.action.ACTION_MESSAGE
{iscrizione=[errore.iscrizione.passworddiverse[Password 2, Password]]}
Però il tag non fa vedere il messaggio associato alla chiave
errore.iscrizione.passworddiverse
|
|
| Back to top |
|
 |
filp Guest
|
Posted: Thu Sep 22, 2005 3:05 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
| Quote: |
Ebbene, non so cosa ho toccato, ma non riesco più a vedere i messaggi
ActionMessages. Il tag html:messages non li mostra, eppure guardando gli
oggetti in scope request c'è tutto quello che ci dovrebbe essere, cioè
ad esempio, nel caso di password diverse ho in memoria:
org.apache.struts.action.ACTION_MESSAGE
{iscrizione=[errore.iscrizione.passworddiverse[Password 2, Password]]}
Però il tag non fa vedere il messaggio associato alla chiave
errore.iscrizione.passworddiverse
|
Ho risolto la seconda parte, mi confondevo con i tag. In pratica usavo
saveMessages invece che saveErrors. Con saveErrors poi si deve usare per
forza il tag html:errors, non html:messages.
Mi pare di aver capito che andrebbe bene anche saveMessages (accoppiato
però necessariamente con html:messages, ma bisogna impostare anche
un'altra proprietà messages a true. Dove vada specificata questa
proprietà al momento non ne ho idea).
(ah, la risposta è per i posteri.. :)
Ciao.
|
|
| Back to top |
|
 |
filp Guest
|
Posted: Thu Sep 22, 2005 5:35 pm Post subject: Re: Struts: problema con ActionForm e validazione |
|
|
| Quote: | ok, il codice funziona. Però in realtà mi si presenta un altro strano
problema: non posso impostare "validate" a false perché per qualche
motivo il form me lo sottomette automaticamente appena carica la pagina;
quindi invia un parametro "method" (per la lookup) vuoto perché il campo
non ho fatto nemmeno in tempo a vederlo e struts solleva l'eccezione che
non trova il metodo giusto (ovviamente).
Ho provato così tanto per vedere con "validate" a true , trascurando il
fatto che in pratica valida due volte, una da solo e una nel codice che
scrivo io, e mi pare che possa andare (il codice); però è inutile se
validate non lo posso mettere a false (cioè si ripresenta il problema
dell'impossibilità di disabilitare la validazione).
Proprio per il motivo che dicevo sopra se validate è true quando carico
la pagina già il validator mi mostra gli errori dei campi che sono
vuoti, anche se in effetti li vedo per la prima volta.
|
Ho risolto anche questo, è che non avevo capito una "mazza" sui forward.
Qui il problema era che invocavo la pagina proprio con il path della
action che necessitava dei dati del form. Invece usando una
ForwardAction intermedia non ho più nessun problema.
(sempre per i posteri, come l'altra risposta... ).
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|