IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

Validation de formulaire avec spring 2.5 et struts 2


Sujet :

Spring Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut Validation de formulaire avec spring 2.5 et struts 2
    Bonjour à tous,

    Je cherche à implémenter une validation de ce formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <form:form action="annuaire/ficheSubmit" commandName="ficheForm">
            <form:label path="firstname">Pr&eacute;nom:</form:label>
            <form:input path="firstname"/>
    	<form:errors path="firstname"/>
     
    	<form:label path="lastname">Nom:</form:label>
    	<form:input path="lastname"/>
    	<form:errors path="lastname"/>
     
    	<form:label path="account">Identifiant:</form:label>
    	<form:input path="account"/>
    	<form:errors path="account"/>
     
    	<form:label path="password">Mot de passe:</form:label>
    	<form:password path="password" autocomplete="off" />
    	<form:errors path="password"/>
     
    	<form:label path="passwordConfirm">Confirmer le mot de passe:</form:label>
    	<form:password path="passwordConfirm" autocomplete="off"/>
    	<form:errors path="passwordConfirm"/>
     
    	<input type="submit" value="Sauvegarder"/>
    </form:form>
    J'ai donc écris une classe correspondante à ce formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    public class FicheForm {
    	private String firstname = null;
    	private String lastname = null;
    	private String account = null;
    	private String password = null;
    	private String passwordConfirm = null;
     
    	public String getFirstname() {
    		return firstname;
    	}
     
    	public void setFirstname(String firstname) {
    		this.firstname = firstname;
    	}
     
    	public String getLastname() {
    		return lastname;
    	}
     
    	public void setLastname(String lastname) {
    		this.lastname = lastname;
    	}
     
    	public String getAccount() {
    		return account;
    	}
     
    	public void setAccount(String account) {
    		this.account = account;
    	}
     
    	public String getPassword() {
    		return password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}	
     
    	public String getPasswordConfirm() {
    		return passwordConfirm;
    	}
     
    	public void setPasswordConfirm(String passwordConfirm) {
    		this.passwordConfirm = passwordConfirm;
    	}
    }
    Une classe de validation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    @Component
    public class FicheValidator implements Validator{
     
    	@Override
    	public boolean supports(Class clazz) {
    		return FicheForm.class.isAssignableFrom(clazz);
    	}
     
    	@Override
    	public void validate(Object target, Errors errors) {
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstname", "firstname.required");
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastname", "lastname.required");
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "account", "account.required");		
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "password.required");
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "passwordConfirm", "passwordConfirm.required");
     
    		FicheForm form = (FicheForm) target;
    		if ( form.getPassword().equals(form.getPasswordConfirm() ) ){
    			errors.rejectValue("password", "passwords.dont.match");
    		}
    	}	
    }
    Et enfin, voici le code du controller que je souhaite mettre en place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [...]
    public String submit(@ModelAttribute("ficheForm") FicheForm fiche,BindingResult result){
            validator.validate(fiche,result);
    	if ( result.hasErrors()){
    		return "failed";
    	}else{
    		//TODO: MAJ user
    	}		
    	return "success";
    }
    Mon problème est le suivant: j'utilise Struts 2 pour gérer toutes les actions de mon application; configuré ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <package name="annuaire" extends="struts-default">
    	<action name="annuaire" method="index" class="com.clt.annuaire.AnnuaireIndex">
    		<result name="success">/WEB-INF/jsp/annuaire/fiche.jsp</result>
    	</action>
    	<action name="ficheEdit" method="index" class="com.clt.annuaire.FicheEdit">
    		<result name="success">/WEB-INF/jsp/annuaire/formfiche.jsp</result>
    	</action>
    	<action name="ficheSubmit" method="submit" class="com.clt.annuaire.FicheEdit">
    		<result name="success">/WEB-INF/jsp/annuaire/fiche.jsp</result>
    		<result name="failed">/WEB-INF/jsp/annuaire/formfiche.jsp</result>
    	</action>
    </package>
    Je ne saisis pas comment faire matcher mes actions (ici: ficheSubmit) avec la méthode submit(@ModelAttribute("ficheForm") FicheForm fiche,BindingResult result) -nécessaire pour initialiser la méthode validate; configuré ainsi, Struts souhaite rediriger vers la méthode "submit()" sans argument

    Auriez-vous une idée sur la manière dont je pourrais procéder pour mettre en place cette validation ? Ou quelques liens sur lesquels je pourrais m'appuyer ?

    D'avance merci !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Je ne suis pas encore un expert en intégration spring-struts2 mais j'en ai réalisé un petit exemple il y a peu et ce que tu essaies de faire ma paraît étrange. Tu essaies de mapper une action struts avec un controller qui possède une implémentation qui ressemble plutôt à spring MVC. Dans ton action struts, il n'y a pas de paramètres, tu appelles donc la méthode submit sans paramètres. Il aurait été plus logique que tu aies un classe d'action struts2 qui ressemble à ça:

    Ton action struts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    import org.apache.log4j.Logger;
     
    import com.opensymphony.xwork2.ActionSupport;
    import com.dawns.studio.javabeans.FicheForm;
     
    public class FicheEditAction extends ActionSupport{
     
    	private static final long serialVersionUID = 1L;
     
    	private Logger myLogger = Logger.getLogger(this.getClass());
     
    	private FicheForm fiche;
     
    	public FicheForm getFicheForm() {
    		return fiche;
    	}
     
    	public void setFicheForm(FicheForm ficheForm) {
    		this.fiche = ficheForm;
    	}
     
    	public String submit(){
    		// Implémentation result
    		validator.validate(this.fiche, result);
    		if ( result.hasErrors()){
    			return "failed";
    		}else{
    			//TODO: MAJ user
    		}		
    		return "success";
     
    	}
     
    }
    Ton formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <form:form action="annuaire/ficheSubmit" commandName="ficheForm">
            <form:label path="fiche.firstname">Pr&eacute;nom:</form:label>
            <form:input path="fiche.firstname"/>
    	<form:errors path="fiche.firstname"/>
     
    	<form:label path="fiche.lastname">Nom:</form:label>
    	<form:input path="fiche.lastname"/>
    	<form:errors path="fiche.lastname"/>
     
    	<form:label path="fiche.account">Identifiant:</form:label>
    	<form:input path="fiche.account"/>
    	<form:errors path="fiche.account"/>
     
    	<form:label path="fiche.password">Mot de passe:</form:label>
    	<form:password path="fiche.password" autocomplete="off" />
    	<form:errors path="fiche.password"/>
     
    	<form:label path="fiche.passwordConfirm">Confirmer le mot de passe:</form:label>
    	<form:password path="fiche.passwordConfirm" autocomplete="off"/>
    	<form:errors path="fiche.passwordConfirm"/>
     
    	<input type="submit" value="Sauvegarder"/>
    </form:form>

    Voila, cela n'est sûrement pas tout à fait fonctionnel, mais devrait te donner une piste.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Mon problème porte surtout sur l'instanciation de la variable result (utilisée pour la validation spring du formulaire).

    Dans spring, ce parametre est instancié automatiquement par spring, or là, je ne vois pas trop comment faire

    Je continue de creuser en tout cas.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    En même temps, la validation existe aussi pour struts via des classes ou des fichiers xml. Tu devrais t'orienter en ce sens car vu que tu utilises une action struts il vaut mieux utiliser la validation via struts. Voici un lien vers un war dans lequel tu trouveras un exemple de validation de formulaires en struts, via xml, tu devrais trouver ton bonheur:

    http://www.gdawj.com/struts2/exemple16.war

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    Pour info, après concertation, nous choisi de nous affranchir de Struts et d'utiliser uniquement spring pour la partie MVC.

    Sujet clos, merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] valider un formulaire avec une fonction ajax
    Par freums dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/02/2008, 11h34
  2. validation de formulaire avec ajax
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 25/01/2008, 15h01
  3. Réponses: 4
    Dernier message: 04/09/2007, 08h55
  4. Réponses: 1
    Dernier message: 21/05/2007, 19h57
  5. Valider un formulaire avec la touche entree
    Par djedie dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/03/2007, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo