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

Redirect, Session et Request


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    Points : 62
    Points
    62
    Par défaut Redirect, Session et Request
    Bonjour à tous,

    il s'agit plus d'une question que d'un problème :-) Un formulaire contient une liste de valeurs, mettons une liste de marque de voiture. Si l'on valide ce formulaire et que la méthode "validate" renvoie un ActionErrors non vide, on affiche les messages d'erreurs dans la page même du formulaire.

    La question est las suivante : j'ai tendance à mettre ce formulaire en session, car en request lorsque l'on tente de réafficher le formulaire avec les messages d'erreurs, jboss me dit qu'il ne trouve plus la liste de marque de voiture. Ceci a comme désavantage que la session gonfle petit à petit et prends de la place en mémoire.

    Alors à part le fait de faire un session.removeAttribute(nomDuFormulaire), y aurait-il une solution alternative ? A quoi sert le redirect=true ?

    Merci à tous ceux qui auraient essayé ou réussi à m'aider.

    Cordialement,

    Coyote

  2. #2
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    Je sais pas si ca va repondre exactement a ta question mais je crois que j ai fait un tuto dans le meme genre hier. Pour conserver les infos en laissant un scope 'request', il faut que ta classe 'action' qui traite le formulaire (en scope request donc), reaffecte les infos a la requete qu'il donne en sortie.

    J'utiliserai donc un 'ActionForward' dans la classe qui etend 'Action'.

    Pour ca, tu copies les infos contenues dans le actionform (ici monObjetForm) dans un objet (ici monObjet) qui permet le traitement du formluaire recu. Ca veut dire que tu as construit en plus du actionform, un objet identique qui recupere tous les attributs du formulaire.

    Tu importes la classe de l'objet (monObjet), et l'instancies dans la methode 'execute' de l'action 'ActionForward':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ActionForward execute(..., ActionForm monObjetForm,...) {
     
    MonObjet monObjet = new monObjet();
     
    BeanUtils.copyProperties(monObjet, monObjetForm);
     
    ...
    Une fois que les infos du formulaire sont tranquiles dans leur nouveau objet tout neuf, tu peux préparer la requete du forward en y incluant les infos que tu retransmets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... request.setAttribute(mapping.getAttribute(), monObjet); ...
    puis tu forwardes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...	return mapping.findForward("monForward");
    Doit y avoir d'autres possibilites, mais j'espere que ca repond a ta question.
    JAVA le dire a tout le monde

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Personnellement, avec seulement un scope =request et un input=maJsp.jsp définis dans le struts config cela fonctionne.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    Points : 62
    Points
    62
    Par défaut mais la redirect=true ?
    Merci à vous deux pour la réponse rapide :-)

    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <forward name="success" path="/monAction.do" redirect="true"/>
    A quois sert le redirect ?

    Coyote

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    c'est pour preciser si c une redirection ou une reepedition.. mais je n'en sait pas plus

    Je saurai pas faire la difference
    JAVA le dire a tout le monde

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Différence entre redirect et forward sur le forward d'une action :

    - Forward (redirect="false") : Après traitement de la requête par ton execute(), la requête est transférée vers une nouvelle ressource, le serveur ne fait donc que poursuivre le traitement de la requête.
    Avantages :
    * Un peu plus rapide que le redirect
    * Tu gardes ton contexte requête, ce qui est souvent bien pratique
    * Tu gardes donc ton form tel quel
    Inconvénients :
    * L'URL affichée dans la barre d'adresse peut prêter à confusion, vu que c'est celle de la première action que tu as appelée, alors que la page que tu affiches finalement peut ne rien avoir à voir.
    * Un F5 de la page provoque l'execution de toute la requête, c'est-à-dire le repost de ton form, le traitement par l'action, le forward, ta deuxième action, ta JSP, ..., ce qui peut être très ennuyeux sur beaucoup d'actions.

    - Redirect : Après traitement de la requête, le serveur renvoie une réponse au client qui refait une requête différente pour obtenir la page forwardée => 2 requêtes
    Avantages :
    * L'URL affichée dans la barre d'adresse est l'adresse véritable de la page
    * Pas de problème de refresh
    Inconvénients :
    * Tu perds tout ce qui est stocké en requête (ActionErrors, ActionForm, etc ...), vu qu'une nouvelle requête est construite.
    * Un petit peu plus long car un aller-retour client/serveur de plus

    A chacun de faire en fonction de ses besoin et de ses goûts. Personnellement, j'utilise systématiquement forward pour mes actions "init" (préparant l'affichage d'une JSP), et redirect pour mes actions "process" (traitant un form posté puis routant vers une autre page), tout en évitant au maximum le piège de attributs de session.

  7. #7
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    donc si j'ai bien compris le forward permet de rajouter des traitement a la requete alors que redirect repasse direct la main a une autre JSP ?
    JAVA le dire a tout le monde

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Plus précisément, le forward passe la main à une autre ressource (servlet / jsp / ce que tu veux) qui continue le traitement de la même requête, tandis que le redirect renvoie un réponse au navigateur qui refait une requête (comme si l'utilisateur venait de cliquer sur un bouton).

  9. #9
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    et on peut ajouter des traitements au niveau de l'action dans le cas d'un redirect ? ou ca permet juste de rebalancer la requete ?
    JAVA le dire a tout le monde

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Oui, mais je pense que tu n'as pas bien compris.
    Au niveau de ton code, c'est exactement le même code qui sera exécuté d'une façon ou de l'autre. La seule différence, au niveau de code, c'est que dans un cas tu as les infos en requêtes, et dans l'autre tu as une requête toute neuve.

  11. #11
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    ok on a un actionForm dans les deux cas donc ?

    (oui je sais je suis un boulet !)
    JAVA le dire a tout le monde

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    (en effet ) pour un forward, tu as ton form tel qu'il est à la fin de ton action, donc avec toutes tes données, et pour un redirect, tu as un form vide (struts fait un new MachinForm() et un form.reset(), c'est tout) si ton form est en request, mais complet (comme avec un forward) si ton form est en session.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/05/2010, 11h16
  2. différence entre session.getAttribute & request.getparameter
    Par perloutta dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 30/05/2009, 01h40
  3. problème session et request
    Par Lolitaaa dans le forum Struts 1
    Réponses: 5
    Dernier message: 19/03/2007, 10h03
  4. [WebForms][1.1] Unable to make the session state request
    Par the_bmo dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 12/10/2005, 14h27
  5. [servlet][jsp] session et request
    Par Stessy dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/01/2005, 11h38

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