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 :

[Struts 1.3] [Validator] traitement par action, conservation du form en erreur


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut [Struts 1.3] [Validator] traitement par action, conservation du form en erreur
    Bonjour,
    J'utilise les Validator dans Struts 1.3.
    Mon problème est que lorsque la personne se trompe dans un des champs de saisie, j'aimerai retourner au formulaire tel que l'a rempli la personne (normal )
    Je ne peux pas mettre en input de mon action la jsp car celle ci a besoin d'un objet form pour par exemple pré remplir des listes déroulantes etc.
    Je mets donc en input l'action.do qui d'habitude prépare mon formulaire.

    Le problème c'est que validator ne me donne pas en paramètre le form que je lui ai submit. Donc je réaffiche le formulaire dans l'état dans lequel la personnne l'a reçu avant de le modifier. Donc toutes ses modifications ne sont pas pré remplies.
    Y a -t-il un moyen de récupérer ce form qu'on a soumis à vérification ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <action path="/EnregistrerForm"
    			type="EnregistrerFormAction" 
    			name="Form" 
    			scope="request"
    			input="/EditerForm.do" 
    			cancellable="true" 
    			validate="true">
    			<forward name="ok" path="/Resultat.jsp" />

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il suffit de mettre le scope du form-bean à session plutôt que request.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Merci !!
    Je ne maitrise pas encore bien Struts (et ses outils mais j'y arriverais !!!)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    je croyais que ça tournais parfaitement mais apres ajouts d'autre chose en fait ça ne tourne pas. (j'ai révé ou changé quelque chose de fondamental ...)

    théoriquement scope="request" passé en scope="session" permet de transmettre le form vers mon action et ensiute je dois le traiter pour le réinjecter ?
    ou directement fait le travail et me prérempli mon formulaire correctement (ce qui me semble vu les résultats que ça me donnaient).

  5. #5
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    A partir du moment où le form-bean est dans le scope session, les données saisies sont conservées sauf si tu as codé une méthode reset() dans l'ActionForm.
    Est-ce le cas ?

    Sinon, peux-tu préciser exactement ce qui ne fonctionne pas bien ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    je n'ai pas codé de méthode reset()

    Ce qui ne fontionne pas bien c'est qu'il me remet le formulaire dans l'état dans lequel il est lorsque la personne arrive dessus (formulaire qui est pré-rempli par mon action) lorsque on se trompe dans la saisie.
    (le même problème qu'au début en fait)

    Ca a fonctionné avec session mais je ne sais pas pourquoi ça ne fonctionne plus.

    Je fais un traitement dans mon action pour préparer mon formulaire qui repère si l'on part d'un objet connu en base de données (elle utilise un request.getParameter de l'id de l'objet). Si l'objet est connu elle prépare le formulaire avec les données sur l'objet. A mon avis cette même méthode écrase le travail de la session.
    Je ne sais pas comment repérer le cas ou l'on sort de la validation pour éviter l'écrasement des données quand on rehcarge le formulaire.

  7. #7
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Maintenant que le scope du form-bean est à session, pourquoi ne pas tout simplement rediriger vers la jsp en cas d'erreur de validation en codant la jsp dans l'attribut input plutôt que le path de l'action ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Ma jsp a besoin d'un form préparé, si elle ne le trouve pas elle ne pourra pas pré remplir tous les champs et ele me met un message d'erreur
    javax.servlet.jsp.JspException: No bean found under attribute key MonForm

  9. #9
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Si le form-bean est dans le scope session, tu n'as besoin de pré-remplir les champs que la première fois.
    Tu ne devrais donc pas avoir ce message d'erreur :
    javax.servlet.jsp.JspException: No bean found under attribute key MonForm

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    je l'ai pourtant, je mets dans mon jsp des
    <logic:notEqual value="0" name="monFormPreRempli" property="id"> pour voir si l'on est en création ou modification

    et je mets des

    <html:text name="monFormPreRempli" property="nom"
    styleClass="text" />

    qui font que si le form n'est pas là ça plante,et apparemment il ne le trouve pas



    Peut être que le problème vient d'ailleurs, en effet je n'ai pas réussi à utiliser les classe DynaValidatorForm et ValidatorForm correctement.
    J'ai du pour qu'il veuille bien se lancer déclarer mes form de la façon suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form-bean name="MonForm"
    			type="org.apache.struts.validator.DynaValidatorForm" >
    			<form-property name="id" type="java.lang.Integer" />
    			<form-property name="nom" type="java.lang.String" />
    			<form-property name="idCleEtrangereDautreChose" type="java.lang.Integer" />
    </form-bean>

    en sachant que comme ceci je n'avais pas les méthodes setters et getters donc je les ai aussi déclaré comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MonForm extends ValidatorForm 
    {
    	private int id;
    	private String nom;
    	private int idCleEtrangereDautreChose;
    /*
    ...getters et setters
    */
    }
    Mais le plus étonnant c'est que ça tournait ce matin et ça revenait en arrière sur les erreurs de saisies en conservant les erreurs

  11. #11
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Je ne comprends pas bien pourquoi dans la jsp, le nom du form-bean est monFormPreRempli et dans le struts-config.xml, c'est MonForm.

    Normalement, le tag html:text étant dans un tag html:form, tu n'as pas besoin de préciser le nom du form-bean dans l'attribut name car il correspond à celui spécifié dans le mapping de l'Action, dans le struts-config.xml, soit dans ton cas MonForm.

    Si tu choisis d'utiliser une DynaValidatorForm, tu n'as pas besoin de créer une classe qui hérite de ValidatorForm avec getters et setters.

    Dans ton cas, je te conseille de créer deux Actions liées au même formulaire : une Action d'initialisation qui pré-remplit les champs du formulaire et une Action qui s'exécute au submit du formulaire.

    Il faut mettre le validate à false dans le mapping de l'Action d'initialisation et à true dans le mapping de l'Action qui s'exécute au submit.
    Dans le mapping des deux Actions, il faut référencer le form-bean MonForm via l'attribut name et mettre le scope à session.

    Si par contre, tu as plusieurs actions à faire sur le formulaire, tu peux utiliser une DispatchAction ou une LookupDispatchAction comme indiqué dans la FAQ.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    j'ai tout réglé de ce que tu m'a dit mais j'ai d'autres problèmes qui se posent ...

    quand je réutilise mon formulaire a un autre moment vu que je suis en session il reste pré rempli avec a derniere session ! comment peut on le reset ?

  13. #13
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Finalement, travailles-tu avec un DynaValidatorForm ou un ValidatorForm ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    ValidatorForm

    ...

    en tout cas merci pour le temps que tu y passe c'est vraiment sympa !!!

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    il sont déclarés comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form-bean name="MonForm" type="chemin.MonForm"/>
    et le fichier chemin.MonForm.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MonForm extends ValidatorForm 
    {
    	private Integer id;
    	private String nom;
    	private int idCleEtrangereDautreChose;
    // getters et setters ici
    }

  16. #16
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans ce cas, dans l'Action qui s'exécute avant l'affichage du formulaire, tu remplis les propriétés du formulaire avec les valeurs que tu souhaites voir par défaut dans la jsp.

  17. #17
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    En fait, tu peux surcharger la méthode reset() dans MonForm pour réinitialiser les propriétés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
       this.id=new Integer(0) ;
       this.nom=null ;
       this.idCleEtrangereDautreChose=0 ;
    }

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    je suis a un resultat ou quand je met scope = "session", ma création se passe à merveille (les cas d'erreurs sont gérés avec le bon retour en arriere vers ce qui a été saisi)

    par contre quand je crée une autre affaire (ou quand je modifie une autre affaire) tout est pré rempli avec la dernière affaire en session.
    (j'ai essayé d'appeler le reset surchargé de mon form lorsque je prépare mon formulaire dans mon action, aucun effet, il garde ce qu'il avait en session)


    Si par contre je met scope = request tout se passe bien, ..... sauf quand on se trompe dans le formulaire : le formulaire est réinitialisé

    en fait il me faudrai soit l'un soit l'autre selon si on est en cas normal ou en validation

  19. #19
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il n'est pas utile d'appeler la méthode reset().
    Celle-ci est appelée automatiquement à chaque fois qu'une Action liée à ce formulaire s'exécute.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    j'ai aussi essayé sans l'appeler même résultat en effet.

    Donc je peux effacer ma session comment quand je traite l'enregistrement (soit dans l'action du struts config soit dans l'action codée qui traite le formulaire) ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JSP][STRUTS] Passer des objets à une classe action
    Par maphi dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2005, 17h55
  2. [STRUTS] Nested tags validation - Client side
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/07/2005, 14h21
  3. [Struts] [JavaBean] Deux beans dans une Action
    Par jak0 dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/05/2005, 17h02
  4. [Struts 1.2] : validation coté serveur
    Par richard_34b dans le forum Struts 1
    Réponses: 3
    Dernier message: 15/09/2004, 16h42
  5. Réponses: 3
    Dernier message: 30/07/2004, 11h51

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