2010-08-13 6 views
14

Je ne savais pas si je pouvais poser ce genre de question, mais après avoir vu this sur Meta Stackoverflow, il semble que ce genre de question soit correct. Eh bien, sur ma question:Cadre de validation de formulaire Javascript: Demande de vérification

Il y a quelques mois, j'ai écrit un framework de validation en Javascript. Je sais qu'il existe déjà des cadres de validation comme jQuery Validation, mais je voulais adopter une approche différente de la validation. Les approches actuelles traitent de l'écriture de code Javascript pour effectuer une validation sur les éléments de formulaire. En regardant le code source du formulaire, il n'est pas immédiatement évident quelle validation a lieu sur chaque élément. Dans une certaine mesure, cela peut être corrigé en utilisant des classes CSS qui spécifient différents types de validation. Mais je sentais que même cela était limité parce que vous ne pouvez pas facilement personnaliser le comportement de la validation (messages d'erreur, etc.). Je voulais faire quelque chose comme la validation par annotation en Java en utilisant JSR-303 Bean Validation ou Hibernate Validator. Depuis HTML5 vous permet d'ajouter des attributs personnalisés à un élément, j'ai pensé que je pourrais tirer parti de cela pour "annoter" des éléments de formulaire pour la validation. Donc, pour l'essentiel, je suis venu avec ceci:

<input id = "myInput" 
     name = "myInput" 
     type = "text" 
     class = "regula-validation" 
     data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' /> 

Avec cette idée de base à l'esprit, j'ai créé un cadre Javascript que:

  • Examine les DOM pour les éléments qui ont des contraintes définies et se fixe ces contraintes aux éléments
  • Permet la création de contraintes personnalisées
  • permet la liaison programmatique des contraintes
  • contraintes liées
  • Validation

En outre, le cadre présente les caractéristiques suivantes:

  • groupes de validation, similaire à celui indiqué dans JSR-303
  • interpolés de messages d'erreur

Une fois que je créé mon cadre J'ai essayé d'obtenir des commentaires et des commentaires, mais je ne savais pas où aller pour obtenir des commentaires et des commentaires. J'ai écrit quelques articles de blog à ce sujet et je l'ai posté sur Digg et Reddit (section de programmation) sans trop de chance. Quelques personnes ont semblé intéressées, mais je n'ai pas eu beaucoup plus que cela. Récemment, sur mon lieu de travail, nous avons modernisé une base de code héritée (JSP et servlets) et l'avons déplacée vers Spring MVC. Lorsque la conversation de validation a eu lieu, j'ai présenté mon cadre à mon architecte principal. J'ai fait un peu d'intégration et de preuve de concept et ils ont semblé intéressés et m'ont donné le feu vert pour l'ajouter au projet. Jusqu'à présent, je n'avais que ma propre humble opinion que ce serait une façon utile de faire la validation, donc cela m'a donné une certaine confiance que mon idée et mon cadre pourraient avoir un certain mérite. Cependant, j'avais encore besoin de plus de participation et de cadre. Après avoir compris que Stackoverflow permettait ce genre de questions, j'ai décidé de le publier ici pour obtenir des critiques constructives, des commentaires et des commentaires.

Donc, sans plus tarder, je voudrais vous présenter Regula. Le lien que j'ai fourni va à un wiki sur GitHub qui a toute la documentation pour le framework. Vous pouvez télécharger la dernière version (v1.1.0) à partir du here.

Dans l'attente de vos commentaires.

Quelques informations supplémentaires qui ne sont pas immédiatement pertinentes

j'avais joué avec l'idée d'intégrer mon cadre avec le printemps, à savoir, la traduction des annotations de validation sur les haricots dans la validation côté client. Récemment j'ai réussi à faire fonctionner ceci, même avec des groupes de validation (bien qu'il n'y ait actuellement aucun support pour les relations d'héritage entre les groupes du côté client). De cette façon, vous devez simplement annoter les propriétés du champ avec les contraintes de validation, et le code de validation côté client est généré automatiquement. Cependant, je suis un novice du printemps et ma méthode n'est probablement pas si propre. J'aimerais avoir des commentaires à ce sujet, donc si quelqu'un est intéressé, faites-le moi savoir. Idéalement (et j'espère que je ne suis pas trop prétentieux), j'aimerais contacter les gens du printemps et voir s'ils sont intéressés par cela.

+0

Je n'ai pas vraiment de cas d'utilisation pour vraiment l'exercer; mais, je vais voter et favori, car il semble être un bon concept. Je suis curieux de voir ce que les gens en pensent. Mon choix de framework web, wicket, élimine pour l'essentiel la nécessité de la validation javascript, car il fournit des facultés pour soumettre des données et produire des commentaires du serveur via une requête ajax. Je sais que d'autres frameworks, comme ASP.NET, encouragent la validation côté client pour le retour dynamique (bien que vous ayez toujours besoin de valider le serveur lors de la soumission du formulaire). – RMorrisey

+0

@RMorrisey merci pour votre commentaire! Je n'ai pas essayé le portillon, mais j'aimerais y jeter un coup d'œil. Je pense que JSF fait aussi quelque chose de similaire à ce que vous décrivez. Au travail, nous avons une validation qui est seulement faite sur le serveur. Avec mon framework, j'ai pu le faire côté client comme vous le décrivez. J'ai une contrainte personnalisée avec un validateur qui effectue une requête AJAX pour effectuer la validation. Merci encore pour vos commentaires! –

+0

Je sais que c'est hors sujet et hors temps pour cela, mais comment avez-vous injecté l'annotation aux contraintes de données? Je suis venu à la question en regardant comment faire quelque chose de similaire (Regula est plus que suffisant pour mes besoins) –

Répondre

7

Je l'aime déjà beaucoup, il garde mon html propre et la possibilité de construire des validateurs personnalisés est super. Une chose que j'ajouté une main courte pour la liaison de la validation et de soumettre des fonctions, et l'enveloppa comme un plugin jQuery:

if (jQuery) { 
    (function($) 
    { 
     $.regula = function(formId, callback) 
     { 
      regula.bind(); 

      $("#" + formId).submit(function() 
      { 
       var validationResults = regula.validate(); 

       if (validationResults.length > 0) 
       { 
        if (callback) 
         callback(validationResults); 

        return false; 
       } 

       return true; 
      }); 
     }; 
    })(jQuery); 
} 

Enfait, je viens de blogged à ce sujet comme je suis impressionné par la propreté et c'est facile. Je vais encore passer du temps à passer par votre source, pour voir comment vous l'avez accompli, mais c'est un bon début :)

En ce qui concerne l'intégration de votre cadre, je travaille principalement avec ASP.NET MVC, et il serait être intéressant de voir comment il traduit la logique de validation côté serveur en contraintes côté client. Quelque chose que je pourrais regarder dans le prochain mois ou deux.

+0

Merci pour les commentaires et le post de blog Matthew! Je travaille principalement sur le côté Java des choses; Je n'ai jamais fait. NET, mais je serais intéressé à regarder dedans! –

+1

J'y ai joué un peu plus et j'ai trouvé un moyen de générer automatiquement des contraintes de données basées sur les attributs fournis par l'espace de noms DataAnnotations de .NET. Je sais que vous êtes un mec de Java, mais si vous êtes intéressé à regarder comment je l'ai fait, je vais mettre à jour mon blog avec un exemple ce soir. J'imagine que le concept pour le faire avec des haricots au printemps est essentiellement similaire, mais avec une saveur de Java ... –

Questions connexes