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.8] Problème à la création d'une règle de validation


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut [Struts 1.3.8] Problème à la création d'une règle de validation
    Bonjour,

    Je me suis créé une règle de validation, Struts ne semble pas vouloir la tester. Dans mon exemple, seul la regle required classique est testée, pas la mienne. Quand je passe en mode débug, je vois qu'il ne passe pas dans ma regle de validation, savez vous pourquoi? Où est mon erreur?

    Merci pour votre aide!

    J'ai déclaré ma règle dans validators-rules.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            <validator name="notFound"
                       classname="com.lecorre.validator.TestExist"
                       method="validateExist"
                       methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           org.apache.commons.validator.Validator,
                           javax.servlet.http.HttpServletRequest"
                       msg="errors.userNotExist"/>
    Dans validation.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form name="login">
                <field
                    property="login"
                    depends="required,notFound">
                        <arg key="loginForm.username"/>
                </field>
    Et ma règle 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
    15
    16
    17
    public class TestExist implements Serializable {
    	public static boolean validateExist(Object bean, ValidatorAction va, 
    			Field field, ActionMessages errors, Validator validator, 
    			HttpServletRequest request){
     
    		LoginDAO lDAO = new LoginDAO();
     
    		if (lDAO.loadLogin(ValidatorUtils.getValueAsString(bean,field.getProperty()))==null)
    		{
    			ActionMessage actionMessage2 = Resources.getActionMessage(request, va, field);
    			ActionMessage actionMessage = actionMessage2;
    			errors.add(field.getKey(), actionMessage);
    			return false;
    		}
    		return true;
    	}
    }

  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
    Peux-tu faire un test en enlevant org.apache.commons.validator.Validator des paramètres :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            <validator name="notFound"
                       classname="com.lecorre.validator.TestExist"
                       method="validateExist"
                       methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           javax.servlet.http.HttpServletRequest"
                       msg="errors.userNotExist"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public static boolean validateExist(Object bean, ValidatorAction va, 
    			Field field, ActionMessages errors,  
    			HttpServletRequest request)

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Meme chose.
    Seule le Required est testé. Ma règle notFound ne l'est pas.

  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
    As-tu défini la règle dans un fichier personnalisé ?

    Si oui, as-tu pensé à l'ajouter dans le struts-config.xml :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    	<set-property property="pathnames"
    		 value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml,/WEB-INF/myValidator-rules.xml"/>	
    </plug-in>

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    As-tu défini la règle dans un fichier personnalisé ?

    Si oui, as-tu pensé à l'ajouter dans le struts-config.xml :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    	<set-property property="pathnames"
    		 value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml,/WEB-INF/myValidator-rules.xml"/>	
    </plug-in>
    J'ai utilisé le même fichier validator-rules.xml existant, et j'ai rajouté ma règle à l'intérieur. Donc à priori pas besoin de modifier le plug-in.

  6. #6
    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
    Je te conseillerai plutôt de définir ton propre fichier de règles parce que le jour où tu changeras de version de Struts, tu risques d'écraser ta règle.
    Mais bon, je ne pense pas que ton problème vienne de là.

    As-tu bien activé la validation côté serveur ?

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Cela consiste en quoi d'activer la validation coté serveur?
    Je n'ai rien fait de la sorte car les autres validations fonctionnaient et je me suis dit que cela irait de la même façon...

  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
    Tu dis que la règle required fonctionne mais tu n'as pas précisé si elle fonctionnait côté client ou côté serveur.
    Affiches-tu les erreurs via un html:errors ou dans une popup ?
    As-tu mis validate à true dans le mapping de l'Action ?

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    J'affiche les erreurs via un <html:errors/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<html:form action="/submitLogin">
    			Login : <html:text property="login"></html:text>  <html:errors property="login" header="errors.entete"
    			footer="errors.pied" prefix="" suffix=""/><br>
    			Password : <html:text property="pwd"></html:text>  <html:errors property="pwd" header="errors.entete"
    			footer="errors.pied" prefix="" suffix=""/><br>
    			<html:submit value="Envoyer"></html:submit>
    		</html:form>

    Je n'ai pas mis de validate a true dans le mapping de l'Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            <action
                path="/submitLogin"
                type="com.lecorre.action.LoginAction"
                name="loginForm"
                scope="request"
                attribute="login"
                input="/login.jsp">
                 <forward name="success" path="/loginSuccess.jsp"></forward>
                <forward name="erreur" path="/loginError.jsp"></forward> 
            </action>

  10. #10
    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
    Ok, donc c'est une validation côté serveur.
    Et bien, je suis désolée mais je suis à court d'idées là.

    Lorsque tu passes en mode debug, il ne rentre pas du tout dans la méthode ou il ne rentre pas dans le if ?

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Il ne rentre pas du tout dans la méthode. Comme s'il ne voyait pas la déclaration de la règle dans le validator-rules.xml.
    Oui, mes erreurs sont toujours tordues...

  12. #12
    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 dernier recours, peux-tu faire un test en déclarant la règle dans un fichier à part comme je te l'ai suggéré précédemment ?

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    En dernier recours, peux-tu faire un test en déclarant la règle dans un fichier à part comme je te l'ai suggéré précédemment ?
    Je l'avais fait entre temps, même résultat.
    Merci pour ton aide en tout cas!
    Je tentais juste de faire une regle car je me forme à Struts et je voulais me rendre compte par moi-même le fonctionnement, mais je crois que je vais devoir me contenter des règles existantes! Tant pis.

  14. #14
    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
    Dis-moi, peux-tu préciser quelle version de Struts tu utilises ?

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    j'utilise la version 1.3.8
    J'ai forcément une erreur dans mon code, sinon la methode Required ne s'exécuterait pas non plus;

  16. #16
    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
    Alors déjà, es-tu à jour au niveau du Validator, de la dtd et pointes-tu sur le bon validator-rules.xml comme indiqué dans les UpgradeNotes ?

    Sinon, il faut laisser org.apache.commons.validator.Validator dans les paramètres de la méthode validateExist contrairement à ce que je t'ai fait tester précédemment.
    Par contre, la méthode getActionMessage avec les paramètres que tu utilises est deprecated.
    Il faut maintenant passer l'objet de type Validator à cette méthode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    errors.add(field.getKey(),Resources.getActionMessage(validator,request,va,field);

  17. #17
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Je pointes sur les bons fichiers, les déclarations sont bonnes et toujours le même problème.
    Je me suis créé un projet tout simple, avec un formulaire de connexion, un fichier myValidator-rules.xml, les bonnes déclarations, et toujours pareil : ma règle de gestion n'est pas détectée.
    Peut-être un bug de Struts 1.3.x ?

  18. #18
    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
    Comme ton problème m'intriguait, j'ai également créé un projet simple en Struts 1.3.8 avec un formulaire de connexion et un validator personnalisé et ça fonctionne très bien.

    En fait, je pense que je viens de trouver ton erreur.
    D'ailleurs, j'aurais dû le voir plus tôt.

    Dans ton fichier validation.xml, tu as mis :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="login">
    Si ton ActionForm hérite de ValidatorForm ou si c'est une DynaValidatorForm, dans l'attribut name, il faut mettre le nom du form-bean :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="loginForm">
    Si ton ActionForm hérite de ValidatorActionForm ou si c'est une DynaValidatorActionForm, dans l'attribut name, il faut mettre le path de ton Action :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="submitLogin">
    Je suis d'ailleurs surprise que le required fonctionne.

  19. #19
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Je pense avoir fait comme tu as dit(en essayant les trois méthodes), mais ça ne marche toujours pas. Te serait-il possible de m'envoyer ton projet? que je vois où je me trompe.

  20. #20
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Apres plusieurs echanges avec la gentille et tres compétente modératrice , apres plusieurs retouches, ma validation marche enfin.
    Etant donné le nb important de retouche de code, je ne peux pas dire pourquoi avant cela ne fonctionnait pas!!
    Ce n'est dc pas tres util pour vous, ceci étant, je me propose de décrire la facon dont je m'y suis pris pour que cela fonctionne.
    Il faut donc :
    1 - Déclarer le plugin validator dans Struts config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property
            property="pathnames"
            value="/org/apache/struts/validator/validator-rules.xml,
                   /WEB-INF/validation.xml, /WEB-INF/myValidator-rules.xml"/>
      </plug-in>
    2 - Modifier le fichier validation.xml en ajoutant sa validation (notFound)
    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
        <formset>
     
            <!-- An example form -->
            <form name="loginForm">
                <field
                    property="name"
                    depends="notFound">
                        <arg key="loginForm.username"/>
                </field>
                <field
                    property="password"
                    depends="required,mask">
                        <arg key="loginForm.password"/>
                        <var>
                            <var-name>mask</var-name>
                            <var-value>^[0-9a-zA-Z]*$</var-value>
                        </var>
                </field>
     
            </form>
     
        </formset>
    3 - Déclarer la validation dans un fichier de validation propre, ici : myValidator-rules.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
    <form-validation>
        <global>
            <validator name="notFound"
                       classname="lecorre.util.TestExist"
                       method="validateExist"
                       methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
                           org.apache.commons.validator.Validator,
                           javax.servlet.http.HttpServletRequest"
                       msg="errors.userNotExist"/>
     
        </global>
    </form-validation>
    4 - Retoucher le fichier properties en conséquence
    5 - Ecrire la méthode de valiadtion validateExist :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public static boolean validateExist(Object bean, ValidatorAction va, 
    			Field field, ActionMessages errors, Validator validator, 
    			HttpServletRequest request)
    	{
    		(...)
    		if (condition Erreur){
    			errors.add(field.getKey(),Resources.getActionMessage(validator,request,va,field)) ;
    			return false;
    		}
    		else {return true;}
    	}
    5 - Dans la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<html:form action="/submitLogin">
    			Login : <html:text property="name"></html:text>  <html:errors property="name" header="errors.entete"
    			footer="errors.pied" prefix="" suffix=""/><br>
    			Password : <html:text property="password"></html:text>  <html:errors property="password" header="errors.entete"
    			footer="errors.pied" prefix="" suffix=""/><br>
    			<html:submit value="Envoyer"></html:submit>
    		</html:form>
    Et voila! en espérant ne rien avoir oublié.........

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

Discussions similaires

  1. Problème pour création d'une vue
    Par gapse dans le forum Oracle
    Réponses: 5
    Dernier message: 30/08/2006, 15h35
  2. Réponses: 9
    Dernier message: 05/04/2006, 17h48
  3. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 12h05
  4. Problème de création d'une dll...
    Par adrien954 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/10/2005, 10h46

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