AppletTalk.com Forum Index AppletTalk.com
Java discussions newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Struts: problema con ActionForm e validazione

 
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian)
View previous topic :: View next topic  
Author Message
filp
Guest





PostPosted: Tue Sep 20, 2005 12:10 pm    Post subject: Struts: problema con ActionForm e validazione Reply with quote



Ciao a tutti.
Ho cominciato da poco a studiare il framework Struts. Spero che possiate
aiutarmi perché la vedo buia Sad
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





PostPosted: Tue Sep 20, 2005 8:36 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote



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





PostPosted: Tue Sep 20, 2005 8:39 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote



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





PostPosted: Wed Sep 21, 2005 9:59 am    Post subject: Re: Struts: problema con ActionForm e validazione Reply with 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...
Back to top
Alex
Guest





PostPosted: Wed Sep 21, 2005 11:36 am    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote


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





PostPosted: Wed Sep 21, 2005 12:26 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with 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

Back to top
filp
Guest





PostPosted: Wed Sep 21, 2005 3:59 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote

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





PostPosted: Thu Sep 22, 2005 7:56 am    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote

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





PostPosted: Thu Sep 22, 2005 11:25 am    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote

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





PostPosted: Thu Sep 22, 2005 3:05 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote


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





PostPosted: Thu Sep 22, 2005 5:35 pm    Post subject: Re: Struts: problema con ActionForm e validazione Reply with quote


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... Wink ).

Back to top
Display posts from previous:   
Post new topic   Reply to topic    AppletTalk.com Forum Index -> Java (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.