Bonjour à tous,

Voila j'ai crée une methode qui herite de la casse Action de Struts et je fais hériter toutes mes actions de cette classe de sorte que je puisse faire des prétraitement avant que la methode excuteAction soit appellée.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
 
public abstract  class BaseAction extends Action implements IConstants {
 
	/**
         * 
         */
	private ActionMessages messages = null;
	private ActionMessages ErrorMessages = null;
 
	public BaseAction() {
		super();
	}
	public ActionForward execute( ActionMapping mapping, 
            ActionForm form,
            HttpServletRequest request, 
            HttpServletResponse response) 
			throws Exception { 
 
			ActionForward forward = null;
 
 
			executeBefore();	
 
                       // call the abstract method
 
			forward = executeAction( mapping, form, request, 
 
			executeAfter(request);
 
			return forward;
 
 
		}        
 
		protected abstract ActionForward executeAction( ActionMapping mapping,  ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception;
 
                private void executeBefore( ) {}
 
		private void executeAfter(HttpServletRequest request ) {
			//Real stuff goes here
			saveMessages(request, messages);
			saveErrors(request, ErrorMessages);
		}
	public void putMessage(String messagesKey,String actionMessageKey,String arg){
 
		if (messages == null){
			this.messages = new ActionMessages( );
		}
 
		messages.add(messagesKey, new ActionMessage (actionMessageKey,arg));
 
	}
	public void putError(String errorKey,String actionErrorKey,String arg){
 
		if (ErrorMessages == null){
			ErrorMessages = new ActionMessages( );
		}
 
		ErrorMessages.add(errorKey,new ActionMessage(actionErrorKey,arg));
 
	}
J'ai remarqué que mes variables messages et ErrorMessages ne sont pas réinitialisé lorsque je rerentre dans l'action.

Pour etre explicite le scenario est le suivant :
J'ai une page de login, je test le login / password. Si c'est incorrect je retourne sur la page de Login et j'affiche le message. Je re-test et c'est encore faux du coup j'affiche encore le message sur la page de login. Mais la mon message d'erreur apparait 2 fois car il a garder en mémoire les messages d'erreur du premier passage(contenu dans ErrorMessage)

Le seul moyen que j'ai pour que ca ne se produise pas c'est de réinitialiser les variables dans la méthode doAfter()

Est ce un comportement normal ??