Bonjour,
Je débute en Struts 2.
Je voulais savoir comment s'effectue une sauvegarde en Struts 2.
Merci d'avance !!!
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ModelCafe
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 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 : 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 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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?
Bonjour,
Voilà ce que lance l'exception :
Les objets que je mets en session est le ModelCafe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 HttpServletRequest request = ServletActionContext.getRequest(); System.out.println("ma session" +" "+ request.getSession());
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2ma session org.apache.catalina.session.StandardSessionFacade@617e53c9
Partager