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 :

Enchainement d'actions avec struts 2


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Enchainement d'actions avec struts 2
    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) :
    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>
    dans laquelle j'exécute le code suivant :
    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;
        }
    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).

    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 :
    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>
    J'ai alors les problèmes suivant :
    - 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 :
    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);
    ou le passage de paramètre ne peut-il pas se faire "tout seul" avec struts?

    Merci d'avance pour votre aide

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Par défaut
    Bonjour,

    Code xml : 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
    Oui effectivement ceci ne permet pas d'afficher une JSP entre les deux action (tous du moins je crois).
    Perso je reverrais une jsp a la premier action et j'appelerais en ajax la second après l'événement onload.
    Je ne sais pas si Struts permet de faire des évolutions de chargement autrement.



    et pour ton deuxième point :
    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
    Oui c'est bien une nouvelle instance, j'ai deux/trois solutions.
    • mettre en session
    • submitter un form pour appeler la second action (la pire idée)
    • stocker en db ou ficher ... les données


    Perso je passerais tous en session, c'est le plus simple et le plus rapide.

    J'espère que ça t'aidera

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse concernant Ajax,

    J'ai vu des choses comme cela sur le net, mais ne connaissant pas ajax, j'ai du mal à comprendre ce que cela fait, pour l'adapter pour mon besoin :

    Mise à jour le struts.xml comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <result-types>
        <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    <action name="AJAXAction" class="com.demo.sd.prj.ui.actions.AJAXAction" method="myMethod">
        <result name="success" type="json" />
    </action>
    code jQuery
    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
    $.ajax({
    url: "AJAXAction",
        type: "POST",
        data: {data: $('#txtbox').val()},
        dataType: "json",
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert('Error ' + textStatus);
            alert(errorThrown);
            alert(XMLHttpRequest.responseText);
        },
        success: function(data){         
            alert('SUCCESS');
     
           }
    });

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Par défaut
    Bonjour,

    Ajax permet d'envoyer une requête (comme un lien ou un formulaire) tout en restant sur la même page et sans aucun rechargement.

    Tu n'est pas obligé d'appeler ta second action en ajax, tu mettre dans ta jsp envoyer après la première action.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        document.location.href= "mon_action";



    Si j'ai bien compris tu regarde pour générer un rapport en deux étapes.

    ex en ajax:

    1/ le clic sur le bouton de génération du fichier, appel un méthode js qui ouvre une fenêtre modale ( génération fichier étape 1/2) et appel la première action en ajax

    2/ au retour de la premier requête, si tous va bien, on met à jour la modale pour passer a le second étape et appeler encore en ajax la seconde action.

    3/ au retour de la second tu peu lancer le téléchargement du fichier.


    J'espère que ça t'aidera.

  5. #5
    Invité
    Invité(e)
    Par défaut
    En fait, je suis une page A.

    Je clique sur le bouton qui lance mon action A.
    Une fois l'action A terminée, je souhaite rafraîchir ma page A (ou au pire utiliser une deuxième page) pour ensuite lancer mon action B automatiquement.

    Si j'ai bien compris, il suffit que dans ma seconde page, je fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.location.href= "mon_action_B";
    .

    Pour ma part, je ne cherche pas à faire télécharger le fichier à l'utilisateur. Celui-ci restera sur le serveur à un endroit défini.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Par défaut
    Oui ça devrais fonctionner.

Discussions similaires

  1. Enchainement d'actions avec sauvegarde des données
    Par opx321 dans le forum Struts 2
    Réponses: 1
    Dernier message: 19/06/2013, 18h20
  2. Forward action avec struts
    Par chennuo dans le forum Struts 1
    Réponses: 2
    Dernier message: 23/04/2008, 14h37
  3. Démarrer une action avec struts
    Par rawanex dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2007, 19h08
  4. Réponses: 2
    Dernier message: 20/08/2005, 19h23
  5. Réponses: 4
    Dernier message: 27/04/2004, 14h45

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