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 :

[Validator] Validation d'un Integer


Sujet :

Struts 1 Java

  1. #1
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut [Validator] Validation d'un Integer
    Bonsoir à tous...

    je veux utiliser la validation des mes formulaire Struts en utlisant le plugin ValidatorPlugIn

    donc j'ai déclaré le plugin dans mon fichier de conf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     	 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
            <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
                                                      /WEB-INF/validation.xml"/>
     	 </plug-in>
    j'ai créer mes deux fichier .xml dans web-inf :

    validator-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
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
      <validator name="integer"
                classname="org.apache.struts.validator.FieldChecks"
                   method="validateInteger"
             methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionErrors,
                           javax.servlet.http.HttpServletRequest"
                  depends=""
                      msg="errors.integer"
           jsFunctionName="IntegerValidations">
     
             <javascript><![CDATA[
                function validateInteger(form) {
                    var bValid = true;
                    var focusField = null;
                    var i = 0;
                    var fields = new Array();
                    oInteger = new IntegerValidations();
                    for (x in oInteger) {
                    	var field = form[oInteger[x][0]];
     
                        if (field.type == 'text' ||
                            field.type == 'textarea' ||
                            field.type == 'select-one' ||
                            field.type == 'radio') {
     
                            var value = '';
    						// get field's value
    						if (field.type == "select-one") {
    							var si = field.selectedIndex;
    						    if (si >= 0) {
    							    value = field.options[si].value;
    						    }
    						} else {
    							value = field.value;
    						}
     
                            if (value.length > 0) {
     
                                if (!isAllDigits(value)) {
                                    bValid = false;
                                } else {
    	                            var iValue = parseInt(value);
    	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
    	                                if (i == 0) {
    	                                    focusField = field;
    	                                }
    	                                fields[i++] = oInteger[x][1];
    	                                bValid = false;
    	                           }
                               }
                           }
                        }
                    }
                    if (fields.length > 0) {
                       focusField.focus();
                       alert(fields.join('\n'));
                    }
                    return bValid;
                }
     
                function isAllDigits(argvalue) {
                    argvalue = argvalue.toString();
                    var validChars = "0123456789";
                    var startFrom = 0;
                    if (argvalue.substring(0, 2) == "0x") {
                       validChars = "0123456789abcdefABCDEF";
                       startFrom = 2;
                    } else if (argvalue.charAt(0) == "0") {
                       validChars = "01234567";
                       startFrom = 1;
                    }
                    for (var n = 0; n < argvalue.length; n++) {
                        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
                    }
                    return true;
                }]]>
             </javascript>
     
          </validator>

    validation.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form name="searchFullForm">
    	<field property="productList" depends="integer">
                   <arg0 key="prompt.productList"/>
                </field>
    </form>
    et dans mon formulaire j'ai bien :

    private Integer productList;

    avec ses get et set...

    mais voilà ça ne fonctionne pas...
    il ne me valide pas mon formulaire...

  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
    Ton ActionForm de name searchFullForm hérite bien de ValidatorForm ?
    Tu as bien mis l'attribut validate à true dans le mapping de l'Action ?

    Pourrais-tu également préciser quelle version de Struts tu utilises ?

    parce que il y a une référence à la classe ActionErrors dans le fichier validator-rules.xml.
    Si tu utilises une version 1.2 ou 1.3 de Struts, il faut remplacer org.apache.struts.action.ActionErrors par org.apache.struts.action.ActionMessages.
    Le plus simple pour ne pas avoir de problème, c'est de prendre le validator-rules.xml livré avec la version de Struts que tu utilises.

  3. #3
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    Salut,

    En faite, la validation de ce formulaire existait déja avant, je voulais simplement ajouter un champ supplémentaire.

    la validation fonctionne bien pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <field property="priceMax" depends="float">
           <arg0 key="prompt.priceMax"/>
    </field>
    <field property="priceMin" depends="float">
           <arg0 key="prompt.priceMin"/>
    </field>

    moi je veux ajouter le champ à la validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <field property="productList" depends="integer">
             <arg0 key="prompt.productList"/>
    </field>
    dans ma form il est déclaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        private Integer _productList;
     
        public Integer getProductList() {
            return _productList;
        }
        public void setProductList(Integer list) {
            _productList = list;
        }

  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
    Tu n'as pas précisé la version de Struts que tu utilises ?

  5. #5
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    Oui c'est vrai dsl, j'utilise la version 1.1 de struts...

    mais si cette validation de formulaire fonctionnait déja avant, mon soucis ne doit pas venir d'un soucis de conf ( org.apache.struts.action.ActionErrors) ???

  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
    Si tu es en 1.1, tu n'as effectivement rien à modifier.

    Ce qui me gêne, c'est le nom de la propriété dans l'ActionForm, soit _productList.

    Pourrais-tu la remplacer par productList ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        private Integer productList;
     
        public Integer getProductList() {
            return productList;
        }
        public void setProductList(Integer list) {
            productList = list;
        }
    Sinon, que contient exactement productList ?
    parce que je trouve bizarre d'appeler productList une propriété de type Integer.

  7. #7
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    je vais faire la modif, sans trop de conviction je te l'avoue, parce que tous les autres champs de mon formulaire sont déclaré comme ça et la validation fonctionne...

    Alors, le champs "productList" contient un entier allant de 0 à 9, il représente une list de produit

    c'est gentil de ma dire que mon truc est bon (je suis d'accord avec toi), mais en tt cas l'appli elle n'est pas d'accord... et c'est bien ça le souci

  8. #8
    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
    comment as-tu ajouter ce nouveau champs dans la JSP?
    peux-tu mettre le bout de code associé?

  9. #9
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    la modif proposée par c_nvy n'as pas fonctionnée...

    voilà la déclaration de ce nouveau champ dans ma jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <td class="libelle1" align="left">Code collection</td>
    <td class="libelle1" align="left">
    <html:text property="productList" maxlength="1" size="1"/>
    </td>
    ps: je precise que tous mes champs sont déclaré de la même façon dans la jsp et dans la form :

    dans la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    _property
     
    public Integer getProductList() {
           return _property;
    }
    public void setProductList(Integer property) {
           _property= property;
    }

  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
    Dis-moi, tu as bien défini un message de clé errors.integer dans ton fichier des messages ?

  11. #11
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    oui voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    errors.integer={0} doit être un entier.

  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 fait, après réflexion, il faut que tu définisses la propriété productList de type String dans ton ActionForm tout en laissant le depends="integer" pour ce champ dans le fichier validation.xml.
    Ainsi, le Validator vérifiera tout simplement que le champ saisi dans le formulaire peut être converti en Integer.
    Et ensuite, tu pourras transformer ce champ en Integer dans ton Action.

  13. #13
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    humm humm je dois t'avoué que je vais tester ça avec beaucoup plus de conviction et d'espoire...

    je vais la modif et je te tiens au courant

  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
    Si tu regardes la doc du Validator de Struts pour la validation de type integer, il est écrit :
    integer - validates that a field can be converted to an Integer.
    Et je sais qu'en Struts 1.x, il est recommandé de définir les champs de l'ActionForm avec un type String et de réaliser la conversion après.
    Je n'ai pour l'instant pas retrouvé où ceci est écrit mais j'en suis certaine.

    Donc, avec un champ de type String, ça devrait fonctionner.

  15. #15
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    Ben écoute, je dois, encore une fois, te tiré mon chapeau !!!

    je me suis posé la question hier entre string et integer, mais comme j'ai rien lu sur le fait qu'il fallait que ce soit un string, j'ai jugé utile de faire le test(en pensant que ça devrais être une spec sortie de mon cerveau et inconnu de tous...)

    et pûis qd tu me la proposé, je me suis dis peut être que finalement ça existe...

    en tt cas merci pour le coup de pouce....

  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
    De rien. J'aurais dû y penser plus tôt.

    Du coup, j'ai jeté un oeil à la méthode validateInteger de org.apache.struts.validator.FieldChecks et pour faire un test, j'ai écrit cette petite classe main en m'inspirant du code de cette méthode :
    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
    import org.apache.commons.validator.GenericTypeValidator;
    import org.apache.commons.validator.GenericValidator;
    import org.apache.commons.validator.util.ValidatorUtils;
     
    public class TestValidationInteger
    {
       public static void main(String[] args)
       {
    	Object bean="9" ;
    	//bean=new Integer(9) ;
    	//bean="A" ;
    	boolean isNotInteger = validateInteger(bean) ;		
            System.out.println("isNotInteger="+isNotInteger) ;
       }
       protected static boolean validateInteger(Object bean)
       {
            Object result = null;
            String value = null;
            boolean isNotInteger = true ;
     
            if(isString(bean))
    	            value = (String)bean;
            else
    	            value = ValidatorUtils.getValueAsString(bean, "monChamp");
            System.out.println("value="+value) ;
     
            if(GenericValidator.isBlankOrNull(value))
            	isNotInteger = true ;
     
            result = GenericTypeValidator.formatInt(value);
            System.out.println("result="+result) ;
     
            if (result != null) isNotInteger=false ;
     
            return isNotInteger ;
       }
       protected static boolean isString(Object o)
       {
            return o != null ? (java.lang.String.class).isInstance(o) : true;
       }
    }
    Si tu testes l'un après l'autre les cas où bean="9", bean=new Integer(9) et bean="A", il y a que dans le cas où bean="9", soit de type String, que result n'est pas égal à null et que la méthode retourne false.
    C'est donc bien prévu pour fonctionner avec une propriété de type String.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut caractères non numériques
    Bonjour
    Et bien moi j'ai le même problème et quand je saisi des caractères non numériques dans ma zone, il les prends et à priori la donnée du bean de formulaire est récupérée avec 0.
    dans mon validation.xml, j'ai rajouté depends, intRange avec valeur min et valeur max
    Si valeur min =1 et que je saisi "A" ça ne passe pas
    mais si valeur min = 0 , ça passe

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

Discussions similaires

  1. [STRUTS][VALIDATOR] Validation de dates
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 16
    Dernier message: 09/09/2005, 11h43
  2. [Validator] Validation javascript du type long
    Par Jaxofun dans le forum Struts 1
    Réponses: 6
    Dernier message: 30/06/2005, 09h34
  3. Réponses: 3
    Dernier message: 15/03/2005, 12h22
  4. [STRUTS][Validation] - Validation dans un execute
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/12/2004, 10h55
  5. [ Struts ][ Validator ]validation côté serveur
    Par tiSioux dans le forum Struts 1
    Réponses: 4
    Dernier message: 29/06/2004, 09h25

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