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

Struts 1 Java Discussion :

[Struts]Variable dans une action non réinitialisé [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut [Struts]Variable dans une action non réinitialisé
    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 ??

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Dans quel scope as tu déclaré ton action dans le struts-config.xml ?
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Voici la déclaration de mon action dans le fichier Struts-config

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          type="com.net.aei.struts.action.LoginAction" >
          <forward name="Loginsuccess" path="/main.jsp" />
     
    </action>

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Ok tu n'est en scope request. Ca c'est ok
    Il ne faut pas oublier de faire appel à <html:errors/> sur la jsp qui suit l'action. Aussi longtemps que les erreurs ne sont pas lus elles restent dans le bean qui les contiennent.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Bah j'ai bien mon tag <html:erreur/>, et justement lui a chaque fois que je reviens sur la page il m'affiche un message de plus du genre :

    Authentification IncorecteAuthification Incorecte

    Mais en débugant l'appli j'ai vraiment constater que s'était c deux variable qui ne se virait pas comme si l'action restait en mémoire !!!

  6. #6
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui je suis crétin, je n'ai pas vu que tu avais déclaré es variables comme membre de la class action. Struts ne recreer pas une nouvelle classe action à chaque fois. Il ne la crée qu'une seul fois.

    Déplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     private ActionMessages messages = null;
    private ActionMessages ErrorMessages = null;
    dans la méthode execute elle même

    car
    Write code for a multi-threaded environment - Our controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets. Here are two general guidelines that will help you write scalable, thread-safe Action classes:
    Désolé de pas avoir vérifié avant
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Wahoooo merci de cette info bien précieuse que tu viens de me donner, car j'aurai eu de serieux probleme !!!!

    Vraiment merci ze_key !!!! Tu l'as eu ou cette info en anglais, sur le site de Jakarta ?

  8. #8
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui et n'oublies pas le tag résolu si c'est ok
    Steve Hostettler
    est ton ami(e) et le tag aussi.

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

Discussions similaires

  1. [ Struts ] redirection dans une action
    Par jakouz dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/04/2006, 15h54
  2. Récuperer un bean dans une action Struts
    Par ksavieras dans le forum Struts 1
    Réponses: 4
    Dernier message: 23/10/2005, 14h55
  3. [Struts] [JavaBean] Deux beans dans une Action
    Par jak0 dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/05/2005, 16h02
  4. Réponses: 3
    Dernier message: 30/07/2004, 10h51
  5. [JSP] [STRUTS] Switch dans une action
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/07/2004, 15h21

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