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 :

Plugin Validor avec javascript


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Plugin Validor avec javascript
    Bonjour,

    Je suis actuellement sur un problème avec l'utilisation du plugin Validator et des formulaires dynamiques. J'explique mon problème :

    Je possède actuellement un formulaire assez simple : un champs pour le nom, un autre pour le pasword. Ce formulaire permet simplement de s'identifier.

    J'ai donc décidé d'utilisé un DynaValidatorActionForm dont j'ai décrit l'implémentation dans struts-config.xml. Jusque là, pas de problème.

    <form-bean name="FormDynaIdentBean" type="org.apache.struts.validator.DynaValidatorActionForm">
    <form-property name="login" type="java.lang.String" initial="" />
    <form-property name="password" type="java.lang.String" initial="" />
    </form-bean>
    J'ai ensuite créé un formulaire tout simple. Vous remarquerez qu"il n'y a pas l'attribut "onsubmit=return validateFormDynaIdent(this)" car pour ce formulaire, je souhaite que le mot de passe soit crypté.

    <html:form action="/identReponse" styleId="formDynaIdent">
    <table>
    <tr>
    <td>login : </td>
    <td><html:text property="login" /></td>
    </tr>
    <tr>
    <td>password : </td>
    <td><html:password property="password" /></td>
    </tr>
    </table>
    <table>
    <tr>
    <td><input type="button" value="Valider" onclick="envoyer(this)" /></td>
    </tr>
    </table>
    </html:form>
    Pour que le mot de passe soit crypter, j'utilise un algorithme de crypter que j'appelle au niveau du javascript. Voici la fonction "envoyer(this)" :

    function envoyer(form)
    {
    form.password.value = MD5(form.password.value);
    if(validateFormDynaIdent(form))
    {
    form.submit();
    }//if
    }//envoyer
    La fonction MD5 est là pour crypter le password avant qu'il ne soit envoyer à la servlet de contrôle. Seulement, cela ne fonctionne pas car la fonction "validateFormDynaIdent(form)" n'est pas reconnu.

    Pouvez-vous m'aider à résoudre ce problème svp ??

    Sinon, j'ai lu un topic sur le même forum à propos de la différence entre les 2 type de formulaire : dynamique ou pas. Comme peu de personne ont donnée leur avis, j'aimerais reposé le débat : lequel des deux formulaires est le mieux.

    Pour ma part, je trouve le formulaire statique plus contraignant niveau code à produire, mais mieux au niveau de la gestion des erreurs (insérables dans la page JSP avec <html:errors />). Concernant les formulaires dynamiques, selon certains sites, il est dit qu'ils sont plus rapide au niveau de la validation coté client.

    Votre avis sur ce point ??

  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
    Ton form-bean s'appelle FormDynaIdentBean.
    Donc, la fonction javascript qu'il faut appeler est validateFormDynaIdentBean et non validateFormDynaIdent.

    De plus, il ne faut pas oublier d'insérer dans la jsp le javascript correspondant au formulaire via le tag suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:javascript formName="FormDynaIdentBean"/>
    Concernant les formulaires dynamiques, j'ai déjà donné mon avis dans cette discussion.
    Mais bon, il est vrai que dans un cas de formulaire simple (comme login et password) avec des règles de validation simples, il peut être intéressant d'en utiliser un.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Alors,

    concernant le tag <html:javascript formName="FormDynaIdentBean"/>, je l'ai évidemment bien ajouter à ma page, mais sans Bean à la fin, soit <html:javascript formName="FormDynaIdent"/>. Si on regarde bien, je lui ai donné le nom du formulaire, et non celui du bean.

    Ensuite, pour ce qui est de la fonction, dans plusieurs tuto, j'ai lu qu'elle devait avoir le nom du formulaire, et non celui du bean. D'ailleurs, avant d'utiliser le javascript, j'ai fait des tests avec "onsubmit=return validateFormDynaIdent(this)" et ca fonctionnait correctement.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Je viens de résoudre mon problème non sans acharnement ^^ !!

    Donc voici ce que j'ai fait : j'ai modifier la fonction javascript comme ceci :

    <script language="javascript">
    function envoyer()
    {
    with(document.formDynaIdent)
    {
    if(validateFormDynaIdent(document.formDynaIdent))
    {
    password.value = MD5(password.value);
    submit();
    }//if
    }//with
    }//envoyer
    </script>
    Maintenant, quand on valide le formulaire, cette fonction est appelée et valide la présence des deux champs. Si c'est bon, le mot de passe est crypté et la servlet correspondante est traitée.

    Pour ce qui concerne la différence entre ActionForm et DynaActionForm, voila se que j'en conclu selon vos avis et mes tests :

    ActionForm :
    - Point + :
    -- Séparation de l'implémentation du bean par rapport à la config.
    -- Possibilité d'afficher les messages d'erreurs sur la JSP (avec <html:errors/>).
    - Point - :
    -- Implémentation des classes bean avec accesseurs qui peut devenir lourd.
    -- Fonction validate() longue à mettre en place pour de grands formulaires.
    -- Validation des champs coté serveur uniquement (sauf si on intègre du javascript sur la page, mais je ne voit plus l'intérêt de la fonction validate() dans ce cas).

    DynaActionForm :
    - Point + :
    -- Validation des champs coté client.
    -- Séparation entre implémentation des champs et validation (avec le plugin Validator)
    - Point - :
    -- Les messages d'erreurs générés par la fonction validateNomForm() ne sont exploitables que sur une popup, et ne peuvent plus être intégrés à la JSP (puisque pas de rechargement de la page JSP).
    -- L'implémentation des formulaires se fait dans struts-config.jsp

    J'ai remarqué aussi qu'avec un formulaire dynamique, si il n'est pas validé, les champs reste tel quel, alors que pour un formulaire non dynamique, les champs subissent un reset. Cela peut être énervant si il faut remplir 36 champs et que l'on se trompe plusieurs fois.

    Voilà mon avis, si vous pouviez le contester ou le valider ça serait simpas. Je ne suis pas à l'abris d'une grossière erreure.

Discussions similaires

  1. navigation dans une jsp avec javascript
    Par petitelulu dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/11/2004, 19h55
  2. Defilement de la fenetre avec JavaScript
    Par black is beautiful dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/09/2004, 11h21
  3. Lien ASP avec javascript
    Par RATIER dans le forum ASP
    Réponses: 3
    Dernier message: 15/07/2004, 09h54
  4. Réponses: 4
    Dernier message: 27/04/2004, 15h45

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