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 2 Java Discussion :

ArrayList ré-initialisé à chaque action


Sujet :

Struts 2 Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut ArrayList ré-initialisé à chaque action
    Bonjour,

    Je suis un tuto (ici) et, comme vous pouvez le voir en page 12, à chaque fois que l'on ajoute un développeur, il est gardé en mémoire dans une liste (liste qui n'est d'ailleurs jamais instanciée dans le tuto ... ou alors je ne l'ai pas vue).

    Dans mon cas, cette liste de développeurs n'est pas gardée et est donc ré-initialisée à chaque action lister().

    Je ne comprends pas bien car j'ai créé l'instanciation de ma liste.

    Voici le fichier struts.xml :
    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
    <struts>
    	<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    	<constant name="struts.devMode" value="true"/>
     
    	<package name="com.developpez.action" namespace="/" extends="struts-default">
    		<default-action-ref name="saisir_Developpeur"/>
     
    		<action name="saisir_Developpeur">
    			<result>/jsp/saisir_Developpeur.jsp</result>
    		</action>
     
    		<action name="enregistrer_Developpeur" class="com.developpez.action.DeveloppeurAction" method="enregistrer">
    			<result name="success">/jsp/lister_Developpeur.jsp</result>
    			<result name="input">/jsp/saisir_Developpeur.jsp</result>
    		</action>
     
    		<action name="lister_Developpeur" class="com.developpez.action.DeveloppeurAction" method="lister">
    			<result name="success">/jsp/lister_Developpeur.jsp</result>
    		</action>
     
    		<action name="supprimer_Developpeur" class="com.developpez.action.DeveloppeurAction" method="supprimer">
    			<result name="success">/jsp/lister_Developpeur.jsp</result>
    		</action>
    	</package>
    </struts>
    voici le fichier DeveloppeurAction.java :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import java.util.ArrayList;
     
    import com.developpez.beans.Developpeur;
    import com.opensymphony.xwork2.ActionSupport;
     
    public class DeveloppeurAction extends ActionSupport {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 5358846971741236790L;
     
    	private int identifiant;
    	private String pseudo;
    	private String mail;
    	private String codePostal;
    	private java.util.Date dateInscription;
    //	private ArrayList<Developpeur> listDeveloppeurs = new ArrayList<Developpeur>();
     
    	private ArrayList<Developpeur> listDeveloppeurs;
     
    	public int getIdentifiant() {
    		return identifiant;
    	}
     
    	public void setIdentifiant(int identifiant) {
    		this.identifiant = identifiant;
    	}
     
    	public String getPseudo() {
    		return pseudo;
    	}
     
    	public void setPseudo(String pseudo) {
    		this.pseudo = pseudo;
    	}
     
    	public String getMail() {
    		return mail;
    	}
     
    	public void setMail(String mail) {
    		this.mail = mail;
    	}
     
    	public String getCodePostal() {
    		return codePostal;
    	}
     
    	public void setCodePostal(String codePostal) {
    		this.codePostal = codePostal;
    	}
     
    	public java.util.Date getDateInscription() {
    		return dateInscription;
    	}
     
    	public void setDateInscription(java.util.Date dateInscription) {
    		this.dateInscription = dateInscription;
    	}
     
    	public void setListDeveloppeurs(ArrayList<Developpeur> listDeveloppeurs) {
     
    		if(listDeveloppeurs == null) {
    			listDeveloppeurs = new ArrayList<Developpeur>();
    		}
    		this.listDeveloppeurs = listDeveloppeurs;
    	}
     
    	public ArrayList<Developpeur> getListDeveloppeurs() {
     
    		if(listDeveloppeurs == null) {
    			listDeveloppeurs = new ArrayList<Developpeur>();
    		}
    		return listDeveloppeurs;
    	}
     
    	public String enregistrer() {
    		System.out.println("dans la méthode enregistrer()......");
    		if(listDeveloppeurs == null) {
    			listDeveloppeurs = new ArrayList<Developpeur>();
    		}
    		for (int i =0; i < listDeveloppeurs.size(); i++){
     
    			System.out.println("PSEUDO : " + listDeveloppeurs.get(i).getPseudo());
    		}
    		Developpeur developpeur = new Developpeur();
    		developpeur.setIdentifiant(identifiant);
    		developpeur.setPseudo(pseudo);
    		developpeur.setMail(mail);
    		developpeur.setCodePostal(codePostal);
    		developpeur.setDateInscription(dateInscription);
    		listDeveloppeurs.add(developpeur);
    		if (this.pseudo.equals("")) {
    			return "input";
    		}
    		return "success";
    	}
     
    	public String lister() {
    		System.out.println("dans la méthode lister().....");
    		return "success";
    	}
     
    	public String supprimer() {
    		System.out.println("dans la méthode supprimer().....");
     
    		if(listDeveloppeurs == null) {
    			listDeveloppeurs = new ArrayList<Developpeur>();
    		}
    		listDeveloppeurs.removeAll(getListDeveloppeurs());
    		return "success";
    	}
    }
    voici le bean Developpeur.java :
    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
    public class Developpeur {
     
    	private int identifiant;
    	private String pseudo;
    	private String mail;
    	private String codePostal;
    	private java.util.Date dateInscription;
    	public int getIdentifiant() {
    		return identifiant;
    	}
    	public void setIdentifiant(int identifiant) {
    		this.identifiant = identifiant;
    	}
    	public String getPseudo() {
    		return pseudo;
    	}
    	public void setPseudo(String pseudo) {
    		this.pseudo = pseudo;
    	}
    	public String getMail() {
    		return mail;
    	}
    	public void setMail(String mail) {
    		this.mail = mail;
    	}
    	public String getCodePostal() {
    		return codePostal;
    	}
    	public void setCodePostal(String codePostal) {
    		this.codePostal = codePostal;
    	}
    	public java.util.Date getDateInscription() {
    		return dateInscription;
    	}
    	public void setDateInscription(java.util.Date dateInscription) {
    		this.dateInscription = dateInscription;
    	}
     
     
    }
    et le fichier lister_Developpeur.jsp :
    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
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Lister les developpeurs</title>
    </head>
    <body>
    	<center>
    		<div>
    			<center>
    				<h2>Liste des développeurs sur developpez.com</h2>
    			</center>
    			<s:if test="%{listDeveloppeurs.size()>0}">
    				<s:iterator value="listDeveloppeurs">
    					<br />
     
     					Identifiant : <s:property value="identifiant" />
    					<br />
     					Pseudo : <s:property value="pseudo" />
    					<br />
    					Mail : <s:property value="mail" />
    					<br />
     					Code postale : <s:property value="codePostal" />
    					<br />
     					Date d'inscription : <s:property value="dateInscription" />
    					<br />
    				</s:iterator>
    			</s:if>
    			<s:else>
     Aucun développeur dans la liste
     </s:else>
     
    		</div>
    		<p></p>
    		<a href="saisir_Developpeur.action">Ajouter un développeur</a><br />
    		<a href="supprimer_Developpeur.action">Supprimer les développeurs</a>
    	</center>
    </body>
    </html>
    voici mon fichier saisir_Developpeur.jsp :
    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags"  %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Saisir un développeur</title>
    </head>
    <body>
    <center><h2>Bienvnue sur le site developpez.com</h2>
    <div id="formulaire">
     <s:form method ="post" action="enregistrer_Developpeur">
     
     <s:textfield name="identifiant" id="identifiant"
     label="Identifiant" labelposition="left">
     </s:textfield>
     
     <s:textfield name="pseudo" id="pseudo"
     label="Pseudo" labelposition="left">
     </s:textfield>
     
     <s:textfield name="mail" id="mail"
     label="Email" labelposition="left">
     </s:textfield>
     
     <s:textfield name="codePostal" id="codePostal"
     label="Code Postale" labelposition="left">
     </s:textfield>
     
     <s:textfield name="dateInscription" id="dateInceription"
     label="Date Inscription" labelposition="left">
     </s:textfield>
     
     <s:submit value = "Envoyer"></s:submit>
     
     </s:form>
    </div>
    </center>
    </body>
    </html>
    Je vous remercie par avance de bien vouloir m'apporter votre aide !

    OS : LinuxMint 20

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    j'ai ajouté ceci à la classe DeveloppeurAction.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public DeveloppeurAction() {
    		System.out.println("constructor");
    	}
    et je remarque qu'en console cet objet est instancié à chaque appel d'une de ses fonctions. Ce qui explique que l'ArrayList est ré-initialisé à chaque fois ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INFOS: Server startup in 2351 ms
    constructor
    dans la méthode enregistrer()......
    constructor
    dans la méthode enregistrer()......
    Par contre, je ne vois pas trop comment initialiser cette classe seulement au démarrage ou seulement une fois au premier appel....
    OS : LinuxMint 20

  3. #3
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Salut,
    Il me semble que struts2 instancie une action par request (contrairement à struts 1 qui partageait les instances). Ton problème est donc à priori normal...
    Peut-être en mettant une variable static (surement trop général), ou en gérant des sessions? Après tu peux toujours passer l'ensemble de ta liste en paramètre de chaque request afin de la récupérer dans tes actions

    bon courage
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

Discussions similaires

  1. Message d'attente pour chaque action
    Par ahlemrhayem dans le forum Général Java
    Réponses: 4
    Dernier message: 22/11/2014, 18h30
  2. Réponses: 5
    Dernier message: 03/03/2014, 13h18
  3. Insérer une pause entre chaque action !
    Par cincap dans le forum Débuter
    Réponses: 10
    Dernier message: 31/08/2013, 09h32
  4. Réponses: 8
    Dernier message: 13/07/2009, 09h57
  5. mon portable plante a chaque action
    Par ndoyemouhamadou dans le forum Windows XP
    Réponses: 1
    Dernier message: 26/06/2008, 09h55

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