Bonjour,
Je débute en Struts 2.
Je voulais savoir comment s'effectue une sauvegarde en Struts 2.
Merci d'avance !!!
Version imprimable
Bonjour,
Je débute en Struts 2.
Je voulais savoir comment s'effectue une sauvegarde en Struts 2.
Merci d'avance !!!
Bonjour,
Pourrais-tu êtres un peut plus précis. Tu souhaites sauvegarder un fichier?
Je tiens avant tout à vous remercier pour votre réponse !!!
Je souhaite sauvegarder une liste de commande qui est une map.
Je crée pour cela une fonction qui va me sauvegarder mes commandes et je sérialise mes objets.
Mais cela ne fonctionne pas, il me donne des erreurs:
Merci :lol: !!!Code:
1
2 java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.opensymphony.xwork2.conversion.impl.XWorkConverter
Bonjour,
Es-tu sur que tous les objets que tu place dans la sessions implémentes interface Serializable?
Pourrait-tu nous monter un peux plus de ton code?
Tu veux garder ta liste de commandes dans un map, et ensuite afficher cela sur une autre page a l'aide de iterator?
N’hésite pas à mettre le code de ton exemple, pour que l'on puisse le reproduire.
Sans plus d'information cela devient compliqué de savoir comment t'aider.
bonjour,
Pour sauvegarder mes commandes passées je serialize mais deux objets:
La commande :
et le ModelCafeCode:
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 package model; import java.util.ArrayList; import java.io.*; public class Commande implements Serializable{ private static final long serialVersionUID = -8493897757955097072L; public enum Etat{Attente,Preparee,Servie}; //l'etat de la commande Etat e; int numeroCommande; //le numero unique d'une commande ArrayList<String>listesBoissons; //le numero du serveur qui a prit la commande int numeroServeur; int table; //represente la table servie static int LASTID=0; public Commande (ArrayList<String> listesBoissons, int numeroServeur, int table){ if(LASTID==0){ java.text.SimpleDateFormat f =new java.text.SimpleDateFormat("ddMMyy"); java.util.Date date=new java.util.Date(); int i=Integer.valueOf(f.format(date)); String s=String.valueOf(i); s=i+"0001"; LASTID=Integer.parseInt(s); } numeroCommande=LASTID; LASTID++; this.numeroServeur=numeroServeur; this.listesBoissons = listesBoissons; this.numeroServeur = numeroServeur; this.e= Etat.Attente; this.table=table; } public Commande(){ if(LASTID==0){ java.text.SimpleDateFormat f =new java.text.SimpleDateFormat("ddMMyy"); java.util.Date date=new java.util.Date(); int i=Integer.valueOf(f.format(date)); String s=String.valueOf(i); s=i+"0001"; LASTID=Integer.parseInt(s); } e=Etat.Attente; numeroCommande=LASTID; LASTID++; listesBoissons=new ArrayList<String>(); numeroServeur=-1; this.table=-1; } /* LES GETTERS ET LES SETTERS */ public Etat getE() { return e; } public void setE(Etat e) { this.e = e; } public ArrayList<String> getListesBoissons() { return listesBoissons; } public void setListesBoissons(ArrayList<String> listesBoissons) { this.listesBoissons = listesBoissons; } public int getNumeroServeur() { return numeroServeur; } public void setNumeroServeur(int numeroServeur) { this.numeroServeur = numeroServeur; } public int getNumeroCommande(){ return numeroCommande; } public void setNumeroCommande(int numeroCommande) { this.numeroCommande = numeroCommande; } public void setTable(int table){ this.table=table; } public int getTable(){ return table; } }
Ma fonction de sauvegarde est la suivante :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
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 package model; import java.io.Serializable; import java.util.AbstractCollection; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ModelCafe extends AbstractCollection<Commande> implements Serializable{ private static final long serialVersionUID = -8493897757955097072L; ArrayList<String> boissons; Map<Integer,Commande>listCommande; ArrayList<Serveur>listServeur; ArrayList<Integer> table; private static int LAST_ID=0; public ModelCafe() { String tab[] = {"Café", "Chocolat", "Eau plate", "Eau gazeuse", "Thé", "Limonade", "Grenadine", "Jus de fruit", "Coca Cola", "Oasis", "Ice Tea", "Sprite", "Porto", "Vin", "Bière"}; boissons = new ArrayList<String>(); for (String element : tab) boissons.add(element); listCommande = new HashMap<Integer,Commande>(); listServeur = new ArrayList<Serveur>(); table=new ArrayList<Integer>(); table.add(1); //table 1 table.add(2); //table 2 table.add(3); //table 3 listServeur.add(new Serveur("nom","prenom")); listServeur.add(new Serveur("nom1","prenom1")); } public void ajouterCommande(ArrayList<String>listBoissons, int numeroServeur, int table){ listCommande.put(LAST_ID,new Commande(listBoissons, numeroServeur, table)); LAST_ID++; } public ArrayList<String> getBoissons(){ return boissons; } public Map<Integer,Commande> getListCommande(){ return listCommande; } public int getSize(){ return listCommande.size(); } public ArrayList<Serveur> getListServeur(){ return listServeur; } public Commande getCommandeNumero(int numeroCommande){ for(int i=0; i<listCommande.size();i++) if(listCommande.get(i).getNumeroCommande()==numeroCommande) return listCommande.get(i); return null; } public ArrayList<Integer> getTable(){ return table; } public void setTable(ArrayList<Integer> t){ table=t; } @Override public Iterator<Commande> iterator() { return listCommande.values().iterator(); } @Override public int size() { return listCommande.size(); } }
Lorsque la commande est passée et que l'on change son état en servie, c'est là que je fais la sauvegarde dans la fonction execute.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 public void save(Commande c){ ArrayList<Object> l= new ArrayList<Object>(); try{ try{ //lire le fichier ObjectInputStream in=new ObjectInputStream(new FileInputStream("fichierCommande")); Object o=in.readObject(); while(o!=null){ l.add(o); //ajouter l'objet dans la liste o=in.readObject(); } } catch(Exception e){ System.out.println(e); } //ecrire sur le fichier ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("fichierCommande")); try{ for(int i=0; i<l.size();i++) //copie tous les objets lu precedemment out.writeObject(l.get(i)); out.writeObject(c); //ecrire la commance c out.flush(); //vider le buffer System.out.println("fin ecrire"); } finally{ out.close(); //fermer le buffer } } catch(Exception e){ System.out.println(e); } }
Merci encore pour votre aide !!!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 */ public String execute() throws Exception{ assert((ModelCafe)getSession().get("cafe")!=null&&getSession().get("cafe").getClass()==ModelCafe.class); ModelCafe c=(ModelCafe)getSession().get("cafe"); cmd=c.getCommandeNumero(numeroCommande); if (cmd.getE().equals(Etat.Preparee)){ c.getCommandeNumero(numeroCommande).setE(Etat.Servie); save(c.getCommandeNumero(numeroCommande)); getSession().put("cafe", c); } return SUCCESS; } }
Ta session est bien du type HttpSession?
Tu charge ta liste à partir du fichier au début du démarrage de ton application avec un listener?
Je te demande tout cela car j'ai besoin de reproduire le fonctionnement de ton application.
Et ce qui représente l’univers de ton model Café tu le met dans la session au démarrage avec tout l’historial des commandes passées?
Non, pas du tout.
Dès que le serveur passe une commande, je l'ajoute dans la liste de commande.
Voilà ce qui me permet d'ajouter mes commandes.
Ensuite, il faut qu'elle passe du coté Barman pour qu'elle soit mis en préparée et par la suite repasse du coté Serveur pour que'elle soit mis en état servie et celle-là justement que je sauvegarde ma commande.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
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216 package controleur.action; import java.util.ArrayList; import java.util.Map; import model.Commande; import model.ModelCafe; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; /** * * * */ public class AfficheBoissons extends ActionSupport implements SessionAware{ /** * Permet d'afficher la liste des boissons présentes et de passer des commande. */ private static final long serialVersionUID = 1L; private ArrayList<String> boissonslistesLeft; //Arraylist contenant les boissons à commander private ArrayList<Integer> listeTables; // ArrayList contenant la liste des tables private ArrayList<Integer>listServeur; // ArrayList contenant la liste des serveurs int serveur; int table; Map<String, Object> session; Commande cmd; ModelCafe mc; /** * Contructeur AfficheBoissons sans paramètres dans lequel, nous initialisons nos variables */ public AfficheBoissons(){ super(); boissonslistesLeft= new ArrayList<String>(); // initialisation des boissonslistesLeft listeTables = new ArrayList<Integer>(); //initialisation de listeTables listServeur = new ArrayList<Integer>(); //initialisation de listServeur cmd = new Commande(); } /** * Getteur de serveur * @return le numéro de serveur */ public int getServeur() { return serveur; } /** * Setter de serveur * @param serveur * Applique un nouveau numéro de serveur */ public void setServeur(int serveur) { this.serveur = serveur; } /** * Getter de table * @return le numero de la table * */ public int getTable() { return table; } /** * Setter de table * @param table * Applique un nouveau numero de table */ public void setTable(int table) { this.table = table; } /** * Getter de l'ArrayList Liste de Serveurs * @return une ArrayList contenant une liste de serveurs */ public ArrayList<Integer> getListServeur() { return listServeur; } /** * Setter de l'ArrayList Liste de Serveurs * @param listServeur * Applique une nouvelle ArrayList de serveurs */ public void setListServeur(ArrayList<Integer>listServeur) { this.listServeur = listServeur; } /** * Getter de ListeTables * @return une ArrayListe de listeTables. */ public ArrayList<Integer> getListeTables() { return listeTables; } /** * Setter de listeTables * @param listeTables * Applique une nouvelle ArrayList de Tables */ public void setListeTables(ArrayList<Integer> listeTables) { this.listeTables = listeTables; } /** * Getter de session * @return session * */ public Map<String, Object> getSession() { return session; } /** * Setter de session * @param session * Applique une nouvelle session */ public void setSession(Map<String, Object> session) { this.session = session; } /** * Getter de BoissonslistesLeft * @return une ArrayList de boissonslistesLeft */ public ArrayList<String> getBoissonslistesLeft() { return boissonslistesLeft; } /** * Setter de BoissonlistesLeft * @param boissonslistesLeft * Applique une nouvelle ArrayList de boissonslistesLeft */ public void setBoissonslistesLeft(ArrayList<String> boissonslistesLeft) { this.boissonslistesLeft = boissonslistesLeft; } /** * Getter de ListesBoissons * @return une ArrayList de ListesBoissons */ public ArrayList<String> getListesBoissons() { return cmd.getListesBoissons(); } /** * Setter ListeBoissons * @param listesBoissons * Applique une nouvelle ArrayListe de listesBoissons */ public void setListesBoissons(ArrayList<String> listesBoissons) { cmd.setListesBoissons(listesBoissons); } /** * Cette méthode nous permet de gérer nosn session d'afin d'ajouter * notre commande de boissons. */ public String execute() throws Exception { ModelCafe mc=(ModelCafe)getSession().get("cafe"); if(mc==null){ mc= new ModelCafe(); session.put("cafe", mc); } else session.put("cafe", mc); mc.ajouterCommande(getListesBoissons(),getServeur(),getTable()); return SUCCESS; } /** * Méthode qui permet de faire un affichage. * @return None * Elle affiche nos boissons à commander, nos serveurs et nos tables. */ public String display() { mc=(ModelCafe)getSession().get("cafe"); if(mc==null){ mc= new ModelCafe(); session.put("cafe", mc); } else session.put("cafe", mc); boissonslistesLeft=mc.getBoissons(); listeTables=mc.getTable(); for(int i = 0; i<mc.getListServeur().size(); i++){ listServeur.add(mc.getListServeur().get(i).getIdServeur()); } return NONE; } }
A aucun moment, je charge ma liste.
Non je n'utilise pas de HttpSession !!!
Merci encore pour votre aide !!!
Très bien, et tu peux dire ou exactement le code ne passe pas?
Quelles sont les objet que tu mets en session que lancent l'exception?
Bonjour,
Voilà ce que lance l'exception :
Les objets que je mets en session est le ModelCafe.Code:
1
2
3 java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.opensymphony.xwork2.conversion.impl.XWorkConverter java.io.NotSerializableException: com.opensymphony.xwork2.conversion.impl.XWorkConverter
Merci.
Peut-tu me montrer ce que tu as derrière les méthodes getSession et put.
Tu as bien une interface JSP, j'ai mi ton object ModelCafe dans une HttpSession vu que j'utilise des servelets, et je n'est pas de problèmes...
Salut,
est-ce que tu pourrais mettre le code qui plante dans un try/catch... les messages d'erreurs affichés par struts sont parfois "biaisés" et on a du mal à trouver le vrai problème.
Je suis en Struts 2, je n'utilise pas de HttpSession, ni de servlets !!!
Merci du temps accordé !!!
Salut,
Dans ma fonction save j'ai déjà mis un try catch.
Cette même fonction lorsque je l'utilise dans ma partie Swing elle fonction.
Je me pose la question à savoir pourquoi sous Swing, elle marche mais pas sous Struts 2.
Voilà la fonction save:
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 public void save(Commande c){ ArrayList<Object> l= new ArrayList<Object>(); try{ try{ //lire le fichier ObjectInputStream in=new ObjectInputStream(new FileInputStream("fichierCommande")); Object o=in.readObject(); while(o!=null){ l.add(o); //ajouter l'objet dans la liste o=in.readObject(); } } catch(Exception e){ } //ecrire sur le fichier ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("fichierCommande")); try{ for(int i=0; i<l.size();i++) //copie tous les objets lu precedemment out.writeObject(l.get(i)); out.writeObject(c); //ecrire la commance c out.flush(); //vider le buffer } finally{ out.close(); //fermer le buffer } } catch(Exception e){ System.out.println(e); } }
Derrière Struts 2 se sont des servelet, dans une action à partir de la request tu peut obtenir la session. J'utilise aussi struts 2 et ça marche, après je te conseille de faire kakashi99 pour voir ou ton code plante.
Je sais pas si c'est ça que vous me demandez mais voilà ce que j'obtiens.
Lignes ajoutées:
Et voila le résultat :Code:
1
2
3
4 HttpServletRequest request = ServletActionContext.getRequest(); System.out.println("ma session" +" "+ request.getSession());
Code:
1
2ma session org.apache.catalina.session.StandardSessionFacade@617e53c9