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 avec Validator pour des champs de type password


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut Problème avec Validator pour des champs de type password
    Bonjour à tous,

    J'utilise le Validator de Struts pour vérifier côté client l'intégrité de mes champs avec Javascript. Cela fontionne parfaitement pour tous mes champs de type "text" et pour n'importe quel type de masque ou contrainte (minlength, maxlength) mais dès que j'applique ces régles sur un champ de type "password", le validator ne semble pas fonctionner.

    Ainsi, dans mon fichier JSP, si mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text styleId="zone_saisie" property="login" size="20"/>
    cela fonctionne mais si je change en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:password styleId="zone_saisie" property="password" size="20"/>
    ...cela ne fonctionne plus (il n'y a pas d'erreur javascript pour autant).

    Notons que les mêmes règles que j'ai établi côté serveur sont alors exécutées... (méthode execute)

    Voici mon fichier validation.xml (mon bean se nomme formIdentification) :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?xml version="1.0" encoding="iso-8859-1"?>
     
    <!DOCTYPE form-validation PUBLIC 
    "-//Apache Software Foundation//DTD Commons ... Configuration 1.1.3//EN"
    "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
     
    <form-validation>
    	<global>
    		<constant>
    			<constant-name>contrainteLogin</constant-name>
    			<constant-value>^[a-zA-Z0-9]+$</constant-value>
    		</constant>
    		<constant>
    			<constant-name>contraintePassword</constant-name>
    			<constant-value>^.{5,15}$</constant-value>
    		</constant>
    	</global>
    	<formset>
    		<form name="formIdentification">
    			<field property="login" depends="required,mask">
    				<msg name="mask" key="formIdentification.contrainteLogin"/>				
    				<arg0 key="formIdentification.login"/>
    				<var>
    					<var-name>mask</var-name>
    					<var-value>${contrainteLogin}</var-value>
    				</var>
    			</field>
    			<field property="password" depends="required,mask">
    				<msg name="mask" key="formIdentification.contraintePassword"/>
    				<arg0 key="formIdentification.password"/>
    				<var>
    	               <var-name>mask</var-name>
    	               <var-value>${contraintePassword}</var-value>
    	            </var>
    			</field>
    		</form>
    	</formset>
    </form-validation>
    Etrangement, la contrainte required quant à elle fonctionne, même pour mon champ de type password car j'obtiens bien le message dans une fenêtre d'alerte Javascript...

    Je ne pense pas qu'il y ait d'erreur dans validation.xml. Savez-vous d'où peut venir ce problème ? Un mauvais fichier de config ?

    Je vous remercie par avance

  2. #2
    Membre averti

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    que se passe-t-il si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text styleId="zone_saisie_p" property="password" size="20"/>
    est-ce que les contrôles se font?

    que se passe-t-il si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:password styleId="zone_saisie_l" property="login" size="20"/>
    est-ce que les contrôles se font?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Le contrôle est alors bien effectué sur password (de type text) et les contrôles sur le champ login (type password) ne fonctionnent plus côté client...

    Pour info, styleId sert juste à appliquer un CSS aux deux zones de texte et mot de passe. En faisant tes modifs zone_saisie_l et zone_saisie_p, aucun style CSS n'est alors appliqué.

  4. #4
    Membre averti

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par orus8 Voir le message
    Pour info, styleId sert juste à appliquer un CSS aux deux zones de texte et mot de passe. En faisant tes modifs zone_saisie_l et zone_saisie_p, aucun style CSS n'est alors appliqué.
    styleId permet de créer l'attribut "id" à la balise html associée.
    Il est souhaitable que dans une page HTML, les balises HTML aient des balises avec un attribut "id" unique.
    Pour appliquer des styles communs, il vaut mieux utiliser l'attribut struts styleClass qui va générer l'attribut "class" en HTML.
    Bien entendu, il faut alors modifier le css :
    avant :
    => accès par l'id
    après :
    => accès par la class
    pour les contrôles qui ne s'exécutent pas sur le client pour les champs password, je ne sais pas....
    Le test que je t'avais demandé de faire était juste pour valider que ton contrôle sur la propriété "password" était correct, ce qui est le cas.

    Est-ce si gênant que les contrôles ne fonctionnent pas côté client?
    L'important, c'est qu'ils fonctionnent côté serveur, non?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Merci pour la précision avec le CSS.

    Oui l'important c'est côté serveur mais là c'est un exercice donc il faut que ça fonctionne des deux côtés...

    Personnellement je fais presque toujours tout côté serveur (certains diront que ce n'est pas bien !) comme ça il n'y a pas de problème.

    J'ai modifié et à la place de mon masque qui vérifiait s'il y avait bien entre 5 et 15 caractères, j'ai utilisé minlength et maxlength comme ceci :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <form-validation>
    	<global>
    		<constant>
    			<constant-name>contrainteLogin</constant-name>
    			<constant-value>^[a-zA-Z0-9]+$</constant-value>
    		</constant>
    		<constant>
    			<constant-name>minVal</constant-name>
    			<constant-value>5</constant-value>
    		</constant>
    		<constant>
    			<constant-name>maxVal</constant-name>
    			<constant-value>15</constant-value>
    		</constant>
    	</global>
    	<formset>
    		<form name="formIdentification">
    			<field property="login" depends="required,mask">
    				<msg name="mask" key="formIdentification.contrainteLogin"/>				
    				<arg0 key="formIdentification.login"/>
    				<var>
    					<var-name>mask</var-name>
    					<var-value>${contrainteLogin}</var-value>
    				</var>
    			</field>
    			<field property="password" depends="required,minlength,maxlength">
    		        <msg name="minlength" key="formIdentification.contraintePassword"/>
    		        <msg name="maxlength" key="formIdentification.contraintePassword"/>
    		        <arg0 key="formIdentification.password" />
    					<var>
    						<var-name>minlength</var-name>
    						<var-value>${minVal}</var-value>
    					</var>
    					<var>
    						<var-name>maxlength</var-name>
    						<var-value>${maxVal}</var-value>
    					</var>
    		    </field>
    		</form>
    	</formset>
    </form-validation>
    Maintenant ça fonctionne. C'est bien que ça fonctionne mais si j'avais voulu faire un masque plus complexe en vérifiant par exemple les types de caractères (au lieu du nombre de caractères), je n'aurai pas réussi.

    C'est donc en partie résolu mais je n'ai toujours pas compris pourquoi le masque n'est pas vérifié côté client....

    Je te remercie en tout cas

  6. #6
    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
    Comme ton cas m'intriguait, j'ai fait un test et j'ai constaté la même chose que toi : la validation de type mask ne s'effectue pas côté client pour le champ de type password mais par contre fonctionne très bien côté serveur.
    Par contre, je n'ai pour l'instant pas d'explications à ça.
    Donc soit c'est un bug, soit le Validator ne gère pas ce cas particulier et dans ce cas, cela devrait être écrit quelque part.
    Pour l'instant, je n'ai pas trouvé d'informations là-dessus.

    Peux-tu préciser quelle version de Struts tu utilises ?
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Ca me rassure !!!

    Pour l'exercice, j'utilise la version 1.3.5 (même s'il y a des versions plus récentes)...

    Si jamais tu trouves le pourquoi du comment, n'hésites pas à nous tenir au courant

  8. #8
    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
    Tu me dis être en Struts 1.3.5 mais je constate que tu ne pointes pas sur la bonne dtd dans ton fichier validation.xml.
    Tu es sensé utiliser la version 1.3.0 des Commons Validator et donc pointer sur validator_1_3_0.dtd.
    Il faudrait donc vérifier que tu as le bon jar et que tu pointes bien sur le validator-rules.xml de struts-core-1.3.5.jar, comme indiqué dans les StrutsUpgradeNotes.
    Modératrice Java - Struts, Servlets/JSP, ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    Merci,

    J'ai vérifié et j'ai bien struts-core-1.3.5.jar.

    Concrètement, je dois changer l'appel du dtd dans validation.xml c'est ça ? Car je ne suis pas certain que la dtd du validator existe en version 1.3.5 ?

  10. #10
    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
    Tout est écrit dans les StrutsUpgradeNotes (voir le lien que je t'ai donné précedemment).
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Points : 47
    Points
    47
    Par défaut
    J'ai modifié les liens vers les DTD et le lien vers le validateur par défaut en suivant ton lien et toujours pareil

    Mais si tu dis que chez toi ça fait la même chose...

    Merci pour ton aide en tout cas !

  12. #12
    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
    C'était juste au cas où ça fonctionnerait en 1.3.5, parce que moi j'utilise une version plus ancienne.
    Modératrice Java - Struts, Servlets/JSP, ...

Discussions similaires

  1. problème avec validation d'un champ double
    Par luna007 dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/06/2008, 23h26
  2. [MySQL] problème avec if pour insérer des champs
    Par nerazzurri dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 23/05/2007, 12h59
  3. [Conception] problème avec firefox sur les champs input type="file"
    Par maverick56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 11/05/2007, 10h57
  4. Problème avec ORDER BY et champ de type "text"
    Par mouchkar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/12/2006, 14h38
  5. requete sql avec between sur des champs de type Date
    Par ersoufiane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/08/2006, 19h43

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