Bonjour à tous,

j'ai bien regardé comment gérer les erreurs de saisies dans mon formulaire ... grâce à la FAQ Struts !

Voici comment j'ai fait :


Mon struts-config.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<action
	path="/FormAffichMachine"
	name="formChoixMachine"
	scope="session"
	validate="true"
	input="/choixMachine.do"
	type="com.manitou.pad.ChoixMachineAction"
>
	<forward name="succes" path="/vues/ficheMachine.jsp"/>
	<forward name="echec" path="/vues/choixMachine.jsp"/>
</action>

Dans ma Form :
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
[...]
// Validation
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
 
	// Gestion des erreurs
	ActionErrors erreurs = new ActionErrors();
 
	// Le numéro de fabrication doit être un numérique, de longueur : 6
	if (getManufactNumber() == null || getManufactNumber().length() < 6) {
		erreurs.add("manufactNumberVide", new ActionMessage("error.manufactNumber.vide"));
	}
 
	return erreurs;
}
[...]

Ma JSP (avant) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[...]
<html:errors property="manufactNumberVide" />
[...]

Dans mon .properties (avant) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
errors.header=<span class="erreur">&nbsp;&nbsp;
errors.footer=</span>
error.manufactNumber.vide=Numéro de fabrication <i>incorrect</i>.

Jusqu'ici ... TOUT VA BIEN !


Par contre lorsque l'utilisateur saisit un numéro de fabrication "logique" : nnnnnn (un entier de 6 chiffres), je fais un contrôle dans mon Action et j'essaye de générer un nouveau message d'erreur.


Dans mon Action :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (id != 0) {
	// Récupération des données en BDD, puis affectation aux éléments de ma page JSP résultat
	
	return mapping.findForward("succes");
} else {
	// Gestion des erreurs
	ActionErrors erreurs = new ActionErrors();
	
	erreurs.add("manufactNumberInexistant", new ActionMessage("error.manufactNumber.inexistant"));
	
	//return erreurs;
	
	return mapping.findForward("echec");
}
Je suis obligé de faire comme cela, car ma méthode "validate" de mon Form n'a pas générer d'erreurs ... forcément la saisie de l'utilisateur est "logique" !

Vous suivez toujours ?!


MON PROBLEME est que la partie en rouge dans le dernier extrait de code, ne peut pas fonctionner ... on ne peut, évidemment pas, avoir deux "return" dans la même méthode !



MA QUESTION est donc : comment signaler à STRUTS qu'une nouvelle erreur a été détecté ? ou comment propager le "erreurs" jusqu'à ma page JSP ?


Ma page JSP (après) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
[...]
<html:errors property="manufactNumberVide" />
<html:errors property="manufactNumberInexistant" />
[...]

Dans mon .properties (après) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
errors.header=<span class="erreur">&nbsp;&nbsp;
errors.footer=</span>
error.manufactNumber.vide=Numéro de fabrication <i>incorrect</i>.
error.manufactNumber.inexistant=Numéro de fabrication <i>inexistant</i>.

Merci d'avance pour votre aide !

Gôm