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 :

problème validation formulaire


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut problème validation formulaire
    Bonjour, je suis un grand débutant en java et pour un projet professionnel, je doit faire une gestion de personnes en struts.

    J'ai une page où il y a un tableau qui est une liste de personnes.

    A chaque fin de ligne, il y a la possibilité de modifier ou supprimer la personne.

    Sous le tableau, il y a un bouton 'Ajouter une personne'.

    Pour faire cela, j'ai crée une classe ModifPersonnesAction qui étend DispatchAction avec comme méthodes modification, ajout, sauver, suppression et un form bean ModifPersonnesForm qui étends ValidatorForm.

    Quand on veut modifier une personne, on exécute un lien hypertexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="personne.modifier.do?do=modification&key=<%=personne.getId()%>">
    modifier
    </a>
    Quand on veut ajouter une personne, on exécute un lien hypertexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="personne.ajouter.do?do=ajout">
    ajouter
    </a>
    Quand on veut supprimer une personne, on exécute un lien hypertexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="personne.supprimer.do?do=suppression&key=<%=invite.getId()%>">
    supprimer
    </a>
    Dans struts-config.xml, l'action d'ajout par exemple est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!-- Appel de la page d'ajout d'un invité -->
    <action
      path="/personne.ajouter"
      type="monpackage.ModifPersonnesAction"
      name="ModifPersonnesForm"
      scope="request"
      parameter="do"
      validate="true"
      input="/personne.ajouter.do"
    >
      <forward name="affichage" path="ajout_personne.jsp" />
      <forward name="liste" path="personnes.jsp" />
    </action>
    Je veux également vérifier les valeurs saisies dans le formulaire d'ajout et de modification. j'ai donc déclaré le ValidatorPlugIn dans struts-config.xml et créé un fichier validation.xml :

    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
     
    <!DOCTYPE form-validation PUBLIC
      "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
      "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
    <form-validation>
    	<global>
    		<constant>
    			<constant-name>entierpositif</constant-name>
    			<constant-value>^\s*\d+\s*$</constant-value>
    		</constant>
    	</global>
    	<formset>
    		<form name="ModifPersonnesForm " >
    			<field property="nom" depends="required" >
    				<arg0 key="nom.vide" />
    			</field>
    		</form>
    	</formset>
    </form-validation>
    Le problème, c'est que lorsque je clique sur ajouter, il semblerai que l'application rentre dans une boucle infinie et que je ne sais pas d'où peut bien venir le problème.

    la méthode ajout de ModifPersonnesAction est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ActionForward ajout(ActionMapping mapping, ActionForm form,
          HttpServletRequest request, HttpServletResponse response)
      throws Exception {
        return mapping.findForward("affichage");
      }
    J'espère qu'un forumeur pourra m'aider, parce que ca fait 1,5 jours que je suis dessus et j'arrive pas a trouver mon erreur.

  2. #2
    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
    C'est normal que tu rentres dans une boucle infinie car tu as spécifié le path de l'Action /personne.ajouter dans l'attribut input.
    Donc quand il y a une erreur de validation, tu exécutes l'Action de path /personne.ajouter indéfiniment.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut
    Si j'ai bien compris, l'attribut input sert à spécifier quelle page afficher si on a des erreurs dans la validation du formulaire. Moi, ce que je voudrais, c'est afficher mes erreurs dans la page qui affiche le formulaire.

    De plus, ma boucle infinie est faite lorsque je veux afficher ma page de formulaire. C'est donc comme si Struts vérifie les champs de mon formulaire avant de l'afficher.

  4. #4
    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 l'attribut input, tu spécifies la page vers laquelle tu veux être redirigé en cas d'erreur de validation.

    Effectivement, comme tu as spécifié validate="true" dans le mapping de l'Action, il essaie de valider les champs du formulaire avant même de l'afficher.

    Dans le cas d'une DispatchAction, il faut mettre validate à false dans le mapping et ensuite, faire appel à la validation dans la (ou les) méthode(s) où la validation est justifiée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	ActionMessages errors = form.validate(mapping, request);
    	if ( !errors.isEmpty() )
    	{
    		this.saveErrors(request, errors);
    		return mapping.getInputForward() ;
    	}

  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 viens de m'apercevoir que malgré le fait que tu utilises une DispatchAction, tu as défini plusieurs mapping pour cette même Action dans le struts-config.xml.
    Dans ce cas, on utilise plutôt une MappingDispatchAction.

    Enfin, comme tu as un mapping différent pour chaque méthode de ton Action, il te suffit de mettre validate à false dans le mapping de l'Action qui permet l'affichage du formulaire et validate à true dans celles qui permettent de le modifier.

  6. #6
    Membre éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 230
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 230
    Par défaut
    Tu veux dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <action
      path="/personne.ajouter"
      type="monpackage.ModifPersonnesAction"
      name="ModifPersonnesForm"
      scope="request"
      parameter="do"
      validate="false"
      input="/personne.ajouter.do"
    >
      <forward name="affichage" validate="true" path="ajout_personne.jsp" />
      <forward name="liste" path="personnes.jsp" />
    </action>
    J'ai du mal à comprendre parce que lorsqu'il va cliquer sur le lien d'ajout : personne.ajouter.do?do=ajout
    - il va executer la méthode "ajout" de son action DispatchAction. Cette méthode va se charger de préremplir le formulaire et va faire un return mapping.findForward("affichage");
    - Il est redirigé vers le formulaire d'ajout/d'edition d'une personne : ajout_personne.jsp. Il saisit les info de la personne. Il submit personne.ajouter?do=sauver
    - La méthode sauver de son action DispatchAction sauvegarde en base puis elle fait un return mapping.findForward("liste");
    - Il est redirigé vers la liste de ses users.


    S'il met le validate dans le forward de affichage, qu'est ce que cela signifie ?
    La validation s'effectue lorsque sur la page rattaché au forward ? jout_personne.jsp ?
    Or c'est trop tot. Nous voulons faire un validate juste après avoir passé cette page.

Discussions similaires

  1. [2.x] Problème validation formulaire
    Par snake264 dans le forum Symfony
    Réponses: 2
    Dernier message: 19/06/2012, 15h12
  2. struts2 problème validation formulaire
    Par ecoplus dans le forum Struts 2
    Réponses: 3
    Dernier message: 21/09/2010, 16h29
  3. [1.x] Problème validation formulaire
    Par ryff54 dans le forum Symfony
    Réponses: 3
    Dernier message: 12/08/2010, 12h46
  4. Problème validation formulaire
    Par gozu13 dans le forum Langage
    Réponses: 1
    Dernier message: 30/09/2008, 16h06
  5. Réponses: 0
    Dernier message: 10/09/2008, 20h40

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