Bonjour.
Je me pose des questions concernant l'enchainement de plusieurs actions avec Struts 2.
Aujourd'hui, j'ai une seule action (qui fonctionne correctement) :
dans laquelle j'exécute le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <action name="genererDmistInitiale" class="dmist.pages.dmist.PageDmistInitialeAction" method="preparationDmistInitiale"> <result name="success">/pages/dmist/pageDmistInitiale.jsp</result> </action>
Mon idée aurait été de découper la méthode précédente en deux morceaux afin de pouvoir suivre l'évolution du traitement sur ma page JSP (en effet, aujourd'hui, j'arrive sur une nouvelle page uniquement au SUCCESS).
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 public String preparationDmistInitiale() throws Exception { /* * Selection des enregistrements à traiter */ ActiviteDAO activiteDAO = new ActiviteDAO(); List<Activite> listeActivite; listeActivite = activiteDAO.findByWhereAaMm(aa, mm); /* * Calcul des taux de cotisation et de reduction * avec MAJ de la base de données */ activiteDAO.setAutoCommit(false); for (Activite activite : listeActivite) { activite.calculerCotisation(); activiteDAO.update(activite); } activiteDAO.commit(); activiteDAO.setAutoCommit(true); /* * Création du fichier */ DmistInit dmistInit = new DmistInit(aa,mm,listeActivite); dmistInit.genererDmistInitiale(); /* * Fin du traitement */ addActionMessage(getText("error.dmistInitiale.traitementOK")); return SUCCESS; }
La première action aurait pu être :
- le chargement de l'objet listeActivite : listeActivite = activiteDAO.findByWhereAaMm(aa, mm);
- le calcul et la mise à jour en base : activite.calculerCotisation(); et activiteDAO.update(activite);
Une deuxième action qui ne s'occupe que de la création du fichier : new DmistInit(aa,mm,listeActivite); et dmistInit.genererDmistInitiale();
Il faudrait alors sortir le champ listeActivite pour le mettre en attribut de la classe et l'avoir alors dans les deux méthodes.
Au niveau de fichier xml, il faudrait faire quelquechose comme cela :
J'ai alors les problèmes suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <action name="actionA" class="dmist.pages.dmist.PageDmistInitialeAction" method="methodeA"> <result name="success" type="redirectAction">actionB</result> </action> <action name="actionB" class="dmist.pages.dmist.PageDmistInitialeAction" method="methodeB"> <result name="success">/pages/dmist/pageDmistInitiale.jsp</result> </action>
- Avec le xml ci-dessus, cela ne me permet pas d'être sur une autre page jsp au moment du traitement de la seconde action (pour que l'utilisateur sache que l'action A est terminée et que l'action B est en cours
- Lors de l'appel à la seconde méthode, j'ai l'impression que Struts recrée une nouvelle instance de ma classe d'action. Mon champs listeActivite devient alors NULL.
Suis-je donc obligé de mettre à la fin de ma première action mon objet en session et de le récupérer lors de ma deuxième action (ou dans le prepare()) comme cela :
ou le passage de paramètre ne peut-il pas se faire "tout seul" avec struts?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 session.put(LISTE_ACTIVITE, listeActivite); ... listeActivite = (List<Activite>) getSession().get(LISTE_ACTIVITE);
Merci d'avance pour votre aide
Partager