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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    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 très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    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.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 143
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 68
    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 très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    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.

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