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 :

Validate ActionForm pour formulaire prérempli


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Par défaut Validate ActionForm pour formulaire prérempli
    Bonjour à tous.

    Je ne connais pas encore les pratiques habituelles avec Struts donc je part p-e du mauvais pied.

    Je suis sur une interface pour modifier une entité "Client". Donc pour l'instant, j'ai une Action qui prend en parametre (GET) l'id du client, va chercher les infos en base, et utilise les setter de l'ActionForm pour préremplir le formulaire de la JSP. Je redirige apres vers la JSP.

    Cette JSP contient un formulaire préremplis qui renvois l'internaute vers la meme Action. Cette Action à donc 2 possibilités :
    - Soit c'est le premier appel et elle préremplis l'actionForm avec les infos du client.
    - Soit c'est le formulaire qui est renvoyé avec des modifications et là, l'Action lis l'ActionForm pour enregistrer les nouvelles infos clients en base.

    Comme ça, ça marche, pas de probleme. ça se complique quand je veux utiliser la methode validate().

    Car elle s'execute avant l'appel de l'Action même au premier appel de la page (là ou l'action.do aurait du passer en premier...). Donc forcement, l'Action n'a pas eu le temps de remplir l'ActionForm puisqu'elle n'a meme pas été appelé et validate genere les erreurs concernant les champs vide!

    Alors a partir de là, je voulais savoir, comment vous procédiez pour ce genre d'interface de "modification", si il y'a une solution simple à mon probleme, ou si je dois completement changer de modele.

    Merci par avance.
    Matthieu

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Par défaut
    pour l'instant, j'ai trouvé une solution temporaire qui consiste à definir 2 actions dans le struts-config (la meme en fait). Dont la difference reside au niveau du parametre validate ="true" / "false"

    Comme ça, j'appelle action1 qui ne fait pas de validation et genere le formulaire pre remplis, et ce formulaire renvois vers action2 qui fait la validation et enregistre les infos en base.

  3. #3
    Expert confirmé

    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
    Par défaut
    Dans ce cas, il faut mettre l'attribut validate à false dans le mapping de l'Action et faire appel à la méthode validate de l'ActionForm dans l'Action au bon endroit, soit dans ton cas quand le formulaire a été modifié, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	// Validation du formulaire
    	ActionMessages errors = form.validate(mapping,request);
    	if ( !errors.isEmpty() )
    	{
    		saveErrors(request,errors);
    		return mapping.getInputForward() ;
    	}

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    bonjour,
    dans ton cas, je ferai 2 actions :
    1) une action d'initialisation du formulaire avec validate="false" dans struts-config.xml
    2) une action de modification du formulaire en base de données avec validate="true" et pour l'attribut input la jsp

    ces 2 actions utilisent le même formulaire.
    struts-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form-beans>
    <form-bean name="ClientForm" type="...ClientForm"/>
    </form-beans>
    <action-mappings>
    <action path="/initialiserClient" type="....InitialiserClientAction" validate="false" name="ClientForm">
    <forward name="afficher" path="...client.jsp"/>
    </action>
    <action path="/modifierClient" type="....ModifierClientAction" validate="true" name="ClientForm" input="...client.jsp">
    <forward name="success" path="...clientModifie.jsp"/>
    <forward name="erreur" path="...client.jsp"/><!-- cas des erreurs fonctionnelles -->
    </action>
    </action-mappings>
    client.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <html:form action="/modifierClient">
    ...
    <html:submit>Modifier</html:submit>
    </html:form>
    InitialiserClientAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ActionForward execute(ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) {
    ClientForm f = (ClientForm) form;
    String id = request.getParameter("id");
    // Recherche du client en base
    Client client = clientService.findId(new Integer(id));
    f.setNom(client.getNom());
    f.set....(client.get....);
    return mapping.findForward("afficher");
    }
    ModifierClientAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ActionForward execute(ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) {
    ClientForm f = (ClientForm) form;
    String forward = "success";
    // Modification du client en base
    try {
    clientService.update(client.getId(), client.getNom(), ....);
    } catch (ClientFonctionnelleException e) {
    // traiter l'erreur
    success = "erreur";
    }
    return mapping.findForward(forward);
    }

  5. #5
    Expert confirmé

    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
    Par défaut
    En fait, je n'avais pas lu dans le détail ton message.
    mattheox a raison.
    Dans ton cas, il vaut mieux créer deux Actions, une Action d'initialisation du formulaire avec validate à false et une Action qui s'exécute au submit du formulaire avec validate à true.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    mattheox a raison.
    Yesssssssssssssssssssssss ;-)

  7. #7
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Par défaut
    Merci pour vos réponses, c'est effectivement ce que j'ai fait.
    A ceci pres, qu'à la place de 2 Action, j'ai mis un MappingDispatchAction.

    Ce que je voulais savoir aussi, c'est comment vous faites lorsque vous devez creer des CRUD (create, retrieve, update, delete) d'une entité ? Est ce que vous mettez en place un système comme celui ci, ou y'a t'il une méthode plus propre ?

  8. #8
    Expert confirmé

    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
    Par défaut
    En principe, on utilise une DispatchAction, une LookupDispatchAction ou une MappingDispatchAction.
    Il y a aussi le datagrid de Struts-Layout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] [Validator] Test pour formulaire
    Par PierreLachaux dans le forum Symfony
    Réponses: 5
    Dernier message: 12/01/2011, 10h44
  2. Réponses: 1
    Dernier message: 15/08/2008, 02h41
  3. Validation simple de formulaire pour un nul
    Par sawati dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 05/01/2008, 15h03
  4. Formulaire prérempli puis validation
    Par Shivaneth dans le forum Struts 1
    Réponses: 15
    Dernier message: 18/07/2007, 14h11
  5. Help pour ouverture d'un popup lors de la validation d'un formulaire
    Par vrossi59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/07/2006, 19h57

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