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.1] [Validator] problème avec requiredif


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Dov
    Dov est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2002
    Messages : 48
    Par défaut [Struts 1.1] [Validator] problème avec requiredif
    Re bonjour,

    J'ai un problème pour utiliser la contrainte requiredif du plugin validator.

    Si j'utilise la contrainte required simple, j'ai bien une fonction javascript required () qui est générée côté client et contenant les contrôles voulus.

    Par contre si je veux utiliser la contrainte requiredif, aucune fonction javascript n'est générée sur le client.

    J'ai essayé des 2 manières suivantes :
    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
     
    <!-- p1 est obligatoire si p2 est null -->
    <form name="formName">		
      <field property="p1" depends="requiredif">
        <arg0 key="msg.p1.required" resource="true"/>	
          <var>
             <var-name>field[0]</var-name>
             <var-value>p2</var-value>
          </var>
          <var>
           	<var-name>fieldTest[0]</var-name>
           	<var-value>NULL</var-value>
          </var>					
      </field>				
    </form>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!-- p1 est obligatoire si p2 est null -->
    <form name="formName">		
      <field property="p1" depends="requiredif">
        <arg0 key="msg.p1.required" resource="true"/>	
          <var>
             <var-name>test</var-name>
             <var-value>(p2 == null)</var-value>
          </var>
      </field>				
    </form>
    Mais sans succès

    Auriez-vous une idée ?

    Merci par avance

    Dov

  2. #2
    Dov
    Dov est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2002
    Messages : 48
    Par défaut
    Bonjour,

    Vu que je ne suis pas arrivé à utiliser la contrainte requiredif en Struts 1.1 (qui apparemment pose beaucoup de problèmes), j'ai finalement redéfini ma propre méthode de validation.

    Ma contrainte de validation était la suivante:
    Pour 2 champs texte A et B d'un formulaire, si A est renseigné, B doit également être renseigné (l'inverse n'étant pas vrai)

    Je poste ma solution sachant que s'il y a plus simple, je suis preneur

    Dans le fichier validator-rules.xml, j'ai rajouté la méthode suivante (le mieux serait de définir un autre fichier de règles qui contiendrait les méthodes de validation complémentaires):
    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
     
    <!-- vérifie que si A est renseigné, B l'est également -->
    <validator name="twofieldsrequired" classname="pachage.CustomValidator" method="validateTwoFieldsRequired" 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.twofields.required">
    	<javascript>
    		<![CDATA[
            function validateTwoFieldsRequired(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oTwoFieldsRequired = new twofieldsrequired();
                for (x in oTwoFieldsRequired) {
                    var field = form[oTwoFieldsRequired[x][0]];
                    var secondField = form[oTwoFieldsRequired[x][2]("boundProperty")];
     
                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio' ||
                        field.type == 'password') {
     
                        var value;
                        var secondValue;
                        // get field's value
                        if (field.type == "select-one") {
                            var si = field.selectedIndex;
                            value = field.options[si].value;
                            secondValue = secondField.options[si].value;
                        } else {
                            value = field.value;
                            secondValue = secondField.value;
                        }
     
                        if (trim(value).length != 0 && trim(secondValue).length == 0) {		                    
                            if (i == 0) {
                                focusField = field;
                            }
                            fields[i++] = oTwoFieldsRequired[x][1];
                            bValid = false;
                        }
                    }
                }
     
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
     
                return bValid;
            }
     
               // Trim whitespace from left and right sides of s.
               function trim(s) {
                   return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
               }	        
           ]]>
    	</javascript>
    </validator>
    Puis j'ai crée une classe package.CustomValidator dans laquelle j'ai créé la 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
     
    public static boolean validateTwoFieldsRequired(Object bean, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) {		
    	String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    	String sProperty2 = field.getVarValue("boundProperty");
    	String value2 = ValidatorUtils.getValueAsString(bean, sProperty2);
    	if (!GenericValidator.isBlankOrNull(value)) {
    		try {
    			if (GenericValidator.isBlankOrNull(value2)) {
    				errors.add(field.getKey(), Resources.getActionError(request, va, field));
    				return false;
    			}
    		} catch (Exception e) {
    			errors.add(field.getKey(), Resources.getActionError(request, va, field));
    			return false;
    		}
    	}
    	return true;
    }
    Puis j'ai rajouté la clé de message suivante dans le fichier de ressources
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    errors.twofields.required={1} est obligatoire.
    Et dans le fichier validation.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form name="form">		
    	<field property="form.propA" depends="twofieldsrequired">
    		<arg0 key="champ A" />
    		<arg1 key="champ B" />
    	    <var>
    	        <var-name>boundProperty</var-name>
    	        <var-value>form.propB</var-value>
    	    </var>		    
    	</field>		
    </form>
    Dov

  3. #3
    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
    Il n'y a effectivement pas d'autre solution que de créer sa propre règle de validation.
    C'est sympa d'avoir posté la solution. ça peut servir à d'autres.

    Par contre, comme tu l'as suggéré dans ton deuxième post, il serait plus propre d'isoler tes propres règles de validation dans un autre fichier que le fichier validator-rules.xml, qui est celui des règles de validation fournies en standard par le Validator.

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

Discussions similaires

  1. [MVC] Validation : problème avec 2 formulaires sur la même page
    Par garthos dans le forum Spring Web
    Réponses: 0
    Dernier message: 05/06/2012, 09h29
  2. [2.x] [Validation] problème avec le validator personnalisé
    Par mougeole dans le forum Symfony
    Réponses: 0
    Dernier message: 07/09/2011, 17h21
  3. [2.x] [Validation] problème avec le validator Regex
    Par mougeole dans le forum Symfony
    Réponses: 0
    Dernier message: 05/09/2011, 16h53
  4. Réponses: 3
    Dernier message: 07/01/2010, 14h14
  5. [Validator] problème avec validation côté client
    Par barchoui dans le forum Struts 1
    Réponses: 9
    Dernier message: 29/11/2008, 17h18

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