Validation de formulaire avec spring 2.5 et struts 2
Bonjour à tous,
Je cherche à implémenter une validation de ce formulaire:
Code:
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é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:
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:
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:
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:
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 !