[JAVA] Fonction de validation dans Play Framework

Dans cet article, j'aimerais écrire sur l'implémentation de la fonction de validation à l'aide de Play Framework. La source peut être trouvée sur GitHub.

Objectif

Pour réaliser la fonction de validation en utilisant les parties de Play Framework. Je voudrais vérifier les éléments d'entrée à partir de l'écran du formulaire et afficher un message d'erreur à l'écran si les éléments d'entrée ne sont pas valides.

environnement

validation La fonction de validation est indispensable pour que les applications web vérifient la validité des données saisies depuis l'écran. De nombreux frameworks sont équipés de parties qui prennent en charge la réalisation de fonctions de validation par défaut, et il existe également des parties hautement fonctionnelles et pratiques dans Play Framework. Je les ai utilisés pour implémenter la fonction de validation. La structure des fichiers est la suivante.

PlayValidation
    ├── app
    │   ├── checks
    │   │   ├── Check.java
    │   │   ├── IndexCheck.java
    │   │   └── unit
    │   │       ├── EqualsCheck.java
    │   │       ├── ManagerLimitCheck.java
    │   │       └── UnitCheck.java
    │   ├── common
    │   │   └── constants
    │   │       └── Job.java
    │   ├── controllers
    │   │   └── AppController.java
    │   ├── forms
    │   │   └── IndexForm.java
    │   └── views
    │       ├── formTable.scala.html
    │       ├── index.scala.html
    │       ├── main.scala.html
    │       └── tableRowInput.scala.html
    ├── conf
    │   ├── messages
    │   └── routes
    └── public
        └── stylesheets
            └── main.css

Fondamentalement, c'est la configuration par défaut de Play, mais j'ai créé un package appelé checks et j'ai essayé d'avoir une logique de vérification des données qui ne peut pas être récupérée par annotation.

Cette fois, je voudrais aborder la forme et la vue.

Form Forms a une classe Form. D'autres frameworks ont la possibilité de vérifier des éléments uniques en ajoutant simplement une annotation aux paramètres du formulaire, mais Play a une fonction similaire. Il existe un package appelé play.data.validation.Constraints, qui vous permet d'effectuer des vérifications obligatoires, des vérifications du nombre de caractères, des vérifications d'expressions régulières, etc., de sorte que la vérification d'un seul élément est presque terminée. J'ai créé IndexForm.java avec des éléments susceptibles d'être communs.

IndexForm.java


public class IndexForm {
	
	/**Nom*/
	@Required
	public String name;
	
	/**âge*/
	@Required
	@Min(value=15, message="Veuillez entrer au moins 15 ans")
	@Max(value=55, message="Veuillez entrer moins de 55 ans")
	public Integer age;
	
	/**adresse mail*/
	@Required
	@Email
	public String email;
	
	/**mot de passe*/
	@Required
	@MinLength(6)
	@MaxLength(10)
	@Pattern(value="^[0-9a-zA-Z]*$", message="Veuillez n'entrer que des caractères alphanumériques")
	public String password;
	
	/**Retaper le mot de passe*/
	public String againPassword;
	
	/**Métier*/
	@Required(message="Doit être sélectionné")
	public String job;

	/**
	 *Contrôle de validité des données d'entrée
	 * @renvoyer les informations d'erreur
	 */
	public List<ValidationError> validate(){
		List<ValidationError> errors = new ArrayList<>();
		IndexCheck check = new IndexCheck();
		check.execute(this, errors);
		return errors;
	}

}

La méthode * validate () est appelée lors de la liaison d'une valeur d'entrée à un Form, et implémente une validation de validation qui n'a pas été récupérée par l'annotation. Checks est une implémentation originale qui n'a rien à voir avec les fonctionnalités de Play Framework, donc je ne la couvrirai pas dans cet article, mais si vous avez le temps, jetez-y un œil et utilisez-la comme référence (ou faites-la remarquer). *

Chaque effet d'annotation est le suivant

Il y a d'autres choses utiles, c'est donc une bonne idée de jeter un coup d'œil aux contraintes. Cependant, il est très pratique que la validation d'un seul élément puisse être implémentée avec juste cela. Le message que vous souhaitez afficher lorsqu'une erreur d'annotation se produit est défini dans un fichier externe, à savoir conf / messages. Ceux qui passent un argument ont leurs paramètres spécifiques à l'annotation.

conf/messages


error.required =Obligatoire
error.invalid =Veuillez saisir le format correct
error.max = {0}Veuillez entrer par âge
error.email =Veuillez saisir votre adresse e-mail
error.minLength = {0}Veuillez saisir plus de caractères
error.maxLength = {0}Veuillez saisir ci-dessous les caractères

De cette façon, vous pouvez définir le message par défaut. Si vous ne passez aucun argument, vous utiliserez ce message d'erreur. S'il n'est pas défini ici, le message défini par défaut dans Play sera utilisé. error.invalid est un message d'erreur lorsque la valeur d'entrée ne peut pas être liée au paramètre Form en raison d'un type incorrect et échoue.

View Dans Play Framework, le html dit dynamique appelé scala.html joue le rôle de la partie vue. Vous trouverez ci-dessous index.scala.html qui arrange simplement les balises d'entrée du formulaire avec les balises de table. ..

scala:index.scala.html


@(playForm: Form[forms.IndexForm])

@import collection.JavaConversions._
@import helper._

@main("Validation Test") {
    <h1>Écran de formulaire</h1>
    @form(action = routes.AppController.post()) {
        @formTable{
            @inputText(
                playForm("name"),
                '_label -> "Nom"
            )(tableRowInput, implicitly[Messages])

            @inputText(
                playForm("age"),
                '_label -> "âge",
                'placeholder -> "15-55 ans"
            )(tableRowInput, implicitly[Messages])

            @inputText(
                playForm("email"),
                '_label -> "adresse mail"
            )(tableRowInput, implicitly[Messages])

            @inputPassword(
                playForm("password"),
                '_label -> "mot de passe",
                'placeholder -> "Alphabet uniquement"
            )(tableRowInput, implicitly[Messages])

            @inputPassword(
                playForm("againPassword"),
                '_label -> "Retaper le mot de passe"
            )(tableRowInput, implicitly[Messages])

            @select(
                playForm("job"),
                options = common.constants.Job.getMap().toSeq,
                '_label -> "Métier"
            )(tableRowInput, implicitly[Messages])

        }
        <button>Envoyer</button>
    }
}

Play a un package views.html.helper qui génère assez bien les balises html. Vous pouvez en savoir plus sur helper en vous référant à la page officielle. En utilisant helper, vous pouvez facilement l'associer à Form du côté Java. Il existe une valeur par défaut pour le modèle généré par helper, mais ici, je voulais afficher la balise de table, donc [tableRowInput](https://github.com/hys-rabbit/PlayValidation/blob/master/app/views/ J'ai créé ma propre tableRowInput.scala.html) et je l'ai utilisée comme modèle.

Contrôle de fonctionnement

Maintenant, je voudrais exécuter le serveur et voir l'écran. スクリーンショット 2017-03-19 12.34.16.png

Cliquez sur le bouton "Envoyer" スクリーンショット 2017-03-19 12.34.16.png

Le message s'affichera correctement.

Résumé

Vous n'êtes pas nécessairement obligé d'utiliser les fonctionnalités du framework, mais compte tenu de la productivité et de la maintenance, je pense que vous devriez adopter autant que possible les fonctionnalités du framework. Au contraire, je ne comprends pas la signification d'utiliser le framework sans utiliser les fonctions du framework. Si vous êtes un ingénieur qui adopte Play pour un nouveau développement, j'aimerais que vous conceviez en tirant parti des fonctions de Play.

GitHub

Recommended Posts

Fonction de validation dans Play Framework
Fonction d'authentification avec Play Framework [Restrictions d'accès]
Construction de l'environnement Play Framework 2.6 (Java) avec Eclipse
Fonction d'authentification avec Play Framework [Enregistrement et authentification]
Etude Play Framework
Gérez le cross-domain JSON avec Play Framework
Test d'étude de Play Framework
jouer des notes personnelles de cadre
Implémenter la fonction d'application dans Rails
Base de données de mémos d'étude Play Framework ①
Java pour jouer avec Function
À propos des méthodes de validation dans JUnit
Notes personnelles de First Play Framework
Introduction de Dozer to Play Framework
Si les éléments du sous-module ne sont pas trouvés dans Play Framework
Play Framework Study Memo Database ②Lire
Ajoutez une fonction de recherche dans Rails.
[Rails] Erreur de validation inattendue dans l'appareil
Création de l'environnement de développement Play Framework 2.6 (Java)
Play Framework Study Momo DB Update
Implémenter une fonction de connexion simple dans Rails
Implémenter la fonction PHP implode en Java
Implémenter la fonction de téléchargement CSV dans Rails
Tweak Markdown avec Java flexmark-java
Erreur rencontrée lors de l'implémentation de la fonction de balisage
Implémentation d'une fonction similaire en Java