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

GWT et Vaadin Java Discussion :

[GWT & Validation] Problème de remote validation


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut [GWT & Validation] Problème de remote validation
    Bonjour, j'utilise GWT & GWT-EXT pour faire un formulaire simple mais auquel je veux ajouter un certain nombre de contrôle comme, la comparaison entre le mot de passe et le mot de passe de confirmation.

    Ce contrôle ne pose pas de souci car il s'exécute totalement coté client.

    Voici le code pour information...

    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
    		final TextField motDePasse = new TextField("Mot de passe",EnregistrementFormBean.FIELD_MOT_DE_PASSE,350);
    		motDePasse.setAllowBlank(false);
    		motDePasse.setPassword(true);
    		fs1.add(motDePasse);
     
    		TextField motDePasseC = new TextField("Mot de passe de confirmation",EnregistrementFormBean.FIELD_MOT_DE_PASSE_CONFIRMATION,350);
    		motDePasseC.setAllowBlank(false);
    		motDePasseC.setPassword(true);
    		motDePasseC.setValidator(new Validator() {
     
    			// Ajout d'une validation sur l'égalité des mots de passes (motDePasse == motDePasseC)
    			public boolean validate(String value) throws ValidationException {
    				if( value == null ) {
    					return false;
    				}
    				if( !value.equals(motDePasse.getValueAsString())) {
    					throw new ValidationException("Les deux mots de passes ne sont pas identiques !");
    				}
    				return true;
    			}
     
    		});
    		fs1.add(motDePasseC);
    Donc, sur ce même principe, j'essaye de réaliser une validation mais cette fois en remoteService.

    J'ai donc un service appelé "identifiantExistant" me retournant 'true' ou 'false'.
    Rien de plus simple !

    Je cherche à présent à ajouter cet appel dans un validateur comme pour l'exemple précédent mais je sèche complètement. J'en comprend bien la raison mais je ne trouve pas d'alternatives...

    Voici le code de cette partie :
    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
    		final TextField identifiant = new TextField("Identifiant", EnregistrementFormBean.FIELD_IDENTIFIANT, 350);
    		identifiant.setAllowBlank(false);
    		identifiant.setMinLength(3);
    		identifiant.setMaxLength(20);
     
    		// Ajout d'un contrôle serveur sur l'existance de cet identifiant
    		identifiant.setValidator(new Validator() {
     
    			public boolean validate(String value) throws ValidationException {
    				if( value == null) {
    					return false;
    				}
     
    				IdentificationService service = (IdentificationService) IdentificationService.Util.getInstance();
     
    				boolean isIdentifiantExistant = service.identifiantExistant(value);
     
    				if( isIdentifiantExistant) {
    					throw new ValidationException("Cet identifiant est déjà enregistré dans notre système.");
    				}
     
    				return true;
    			}
     
    		});
     
    		fs1.add(identifiant);
    Évidement, ce code ne fonctionne pas...

    Une petite idée ?
    Merci par avance

  2. #2
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2003
    Messages : 229
    Par défaut
    Bonjour,

    De ce que j'ai compris, le Validator ne fonctionne pas car la méthode validate continu son execution sans attendre le résultat du IdentificationService (évidemment, puisqu'il est asynchrone).

    J'ai déjà été confronté à ce genre de problème, que j'avais résolu en inscrivant l'objet appelant dans l'objet effectuant l'appel asynchrone, et en le "réveillant" lorsque le résultat de l'appel async arrivait.

    Cependant, ici, ça n'est pas possible, puisque l'appelant est une seule méthode, qui ne peut pas interrompre son execution. Dans l'idée, il faudrait une méthode validateDebut() qui lance l'appel asynchrone, et validateFin(), appelée par IdentificationService lorsque le résultat est arrivé. Evidemment, ça ne correspond pas du tout à la spécification de Validator, et donc tu ne pourrais plus utiliser ce mécanisme (setValidator(), etc...)
    Peut-être qu'il existe des mécanismes dans Validator pour implémenter ce genre de service ; sinon, j'ai peur que tu ne sois obligé de reconstruire un Validator manuellement...

    Edit : après consultation de la javadoc, l'interface Validator ne contient qu'une méthode validate(String) ; je trouve ça assez léger, d'autant qu'il est très fréquent d'avoir besoin des infos du serveur pour valider une donnée...

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Par défaut
    Merci de ton retour...

    J'en suis arrivé aux même conclusions et je n'ai toujours pas de solution.

    Je pense même être dans un double appel asynchrone car la méthode form.validate est appelée de manière asynchrone elle aussi par le monitoring...


    J'attends des nouvelles de la part de S.Jivan sur le forum GWT-Ext.

    Je vous tiens au courant !

Discussions similaires

  1. [2.x] [Validation] problème avec le validator personnalisé
    Par mougeole dans le forum Symfony
    Réponses: 0
    Dernier message: 07/09/2011, 17h21
  2. [2.x] [Validation] problème avec le validator Regex
    Par mougeole dans le forum Symfony
    Réponses: 0
    Dernier message: 05/09/2011, 16h53
  3. [XSD] Problème de XML validation par fichier XSD:org.xml.sax.SAXNotRecognizedException
    Par bareillesj dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/04/2007, 14h39
  4. Problème : XML non valide...
    Par loupdeau dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 08/04/2005, 15h12

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