SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Play! Framework
–
Formation 
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Quelques mots sur Play!
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Historique
2007 Créé par Guillaume Bort
2008 Framework Open Source
2009 Version 1.0 en octobre
2010 Version 1.0.1 en janvier
2011 Version 1.1 en octobre
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Un tour d'horizon
Pas de compilation
Respecte le protocole HTTP
RESTFull
Stateless
Système de templating simple
Groovy
Framework MVC
Rapide (exécution & développement)
Extensible par des modules
Pure JAVA !!!
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La communauté
Twitter
http://twitter.com/playframework
~ 1600 followers
~ 500 tweets
Google group
http://groups.google.com/group/play-framework
~ 15000 messages
~ 1300 membres
~ 40 messages / jour
Github
http://github.com/playframework/play
~ 120 watchers
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
framework web en Java
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
web framework java 
Alors qu'il existe déjà
JSF
Struts
Spring MVC
Wicket
...
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
web framework java 
« Java web frameworks are
created by java developpers, not
Web developpers »
« Java developpers are building
Java applications, not web
applications »
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
web framework java 
Web VS middleware
La complexité en Java est culturelle
Interfaces
Abstraction
RMI
EJB
SOAP
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
web framework java 
WEB
=
REST
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pourquoi un nouveau 
web framework java 
« Play ! Framework is the first
reasonable Java web framework I
have personnaly seen»
Bret Taylor
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les avantages de Play!
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Cycle de Vie
Framework J2EE Traditionnel
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Cycle de Vie
Avec Play!
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les fonctionnalités
Module de sécurité
CRUD
Validation
Jobs asynchrones
I18n
Tests (unitaire & selenium)
L'envoie de mail
Webservices
RESTFull services
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les fonctionnalités
Et avec les modules :
OpenID, CAS
Export en PDF
Export Excel
Rendre les CSS dynamiques
Minifier
Recherche
…
http://www.playframework.org/modules
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les fonctionnalités
Play! est compatible avec toutes les librairies
Java.
Play ! Intègre déjà :
Hibernate
Google Gson
Commons (fileupload, httpclient, email, logging …)
EhCache
...
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
A la découverte de play!
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Architecture
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La structure d'une appli
Créer une nouvelle application
Play new monApplication
Structure de l'application
./conf
./conf/routes
./conf/application.conf
./conf/messages
./test
./lib
./public
./app
./app/models
./app/controllers
./app/views
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les routes
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le fichier de configuration
Configuration
De la base de données
Du logger
Du cache
Du serveur SMTP
Des modules
System settings
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le fichier de configuration
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le fichier de configuration
Mais comment on fait pour tous travailler
avec le même fichier de configuration,
alors que nos environnements ne sont pas
identique ?
play id
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
A la découverte de play ! :
Le Model
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le model
Définition en JPA
Beaucoup d'annotation ! Que ce soit pour le
mapping avec la base de données ou pour la
structure / validation des champs
– @Entity
– @OneToMany
– @Column
– … (pour la validation nous verrons plus loin)
Doit étendre de la classe « Model »
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le model
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le model
Tout est public ! Il n'y a pas de getter/setter
Play : génère les getters/setters au runtime
Vous pouvez surcharger les getters/setters
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le model
La classe « Model » est un Helper
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Le model
Import / Export de la base en YML
Import natif dans play
Export avec le module YML(version 1.0)
– http://github.com/sim51/logisima-play-yml
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
A la découverte de play! :
Les controllers
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Doit étendre la classe « Controller »
Possède que des méthodes public static void
Une méthode est appelée selon une route
Un controller donne accès à plusieurs méthode de rendu
Json
Xml
Pdf
…
On peut chainer les actions
Redirection
En appelant directement la méthode : Application.index()
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Les paramètres d'entrées des Controlleurs
Ce sont les variables en GET / POST / DELETE /
PUT
Les GET peuvent être défini dans le fichier de routes
Il n'y pas que des types simples, on peut y mettre
des objets de notre model. Ces objets seront créée
via les paramètres de la request. Exemple :
– resto.name
– resto.url
– ...
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Les paramètres de sorties des controlleurs
Il suffit d'ajouter les objets à la méthode render
exemple :
– render("Public/resto/show.html", resto, randomID) ;
Ou d'appeler la méthode renderArgs
– renderArgs.put(« resto », resto);
Sinon, il y a les différents scopes
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les scopes
Application
Session
Stocké dans un cookie sécurisé et accéssible durant toute la
session de l'utilisateur (4Kb).
Flash
Stocké dans un cookie sécurisé et uniquement accessible par la
prochaine requête (4Kb).
Request
Pour tout le reste, il y a le cache !
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Les fichiers de rendu
Par défaut Play! cherche le fichier suivant :
– app/views/[Classe Name]/[Methode Name].html
– app/views/Application/index.html
Mais on peut spécifier un fichier
– render("Public/resto/show.html", resto);
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
C'est bien beau de ne plus
avoir la « servlet-api »,
mais comment je fais pour faire
un filtre ?
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
Il existe les intercepteurs !
@Before
– Exécute la méthode annotée avant chaque action du Controller.
On peut exclure certaine action (unless={« login », « logout »}), ou
définir seulement quelques actions (only={« login », « logout »})
@After
– Exécute la méthode annotée s'exécute après chaque action du
Controller.
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les controllers
@Finally
– Exécute la méthode annotée après chaque résultat d'action du
Controller.
@With
– Permet de déléguer les intercepteur à une classe.
Les intercepteurs s'appliquent même aux sous-classes !
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
A la découverte de play! :
Les templates
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
La Syntax
Expressions : ${ … }
– Permet d'afficher une variable: ${resto.name}
Messages : &{ … }
– I18N. Affiche la valeur correspondant à la clef (définie
dans le fichier conf/messages)
Actions (reverse Route):
– @{ …} : génère l'URI de l'action :
@{Application.index()}
– @@{ …} : génère une URL absolue
Commentaires : *{ … }*
Scripts : %{ … }%
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
Les décorateurs
Fichier html de template parent
Un template hérite du décorateur
#{get /}, #{set /}, #{extend /} & #{doLayout /}
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
Les Tags : #{tagName /}
Un tag est un fragment de HTML qui peut être
appelé avec des paramètres.
Un tag correspond à un fichier devant absolument se
trouver dans le répertoire « app/views/tags », et le
nom du tag correspond au nom du fichier.
Les paramètres passés au tag sont accessibles
dans le tag via _[le nom de mon paramètre]
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
Les Tags : #{tagName /}
Exemple d'appel :
Le fichier article.html :
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
Les extensions
Certaines méthodes sont ajoutés au objets dans les templates :
– Date|format() : pour formater une date : ${myDate.format('dd
MMMM yyyy hh:mm:ss')}
– String|escapeHtlm() : pour échapper le code html
– String|nl2br() : remplace les sauts de ligne par des <br/>
– String|raw() : pour ne pas échapper le code html.
– …
Il est à noter que Play ! échappe automatiquement tous les textes.
http://www.playframework.org/documentation/1.1/javaextensions
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les templates
Les extensions personnalisées
Il est possible de créer ses propres extensions !
Il suffit de créer une classe
– qui étend de JavaExtensions
– Contenant des méthodes public static
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
A la découverte de play! :
Les jobs
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Les Jobs
Doit étendre la classe « Job »
@Every(«1d»)
@On(«0 0 12 * * *)
– CRON expression
@OnApplicationStart
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
Pour aller plus loin ...
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
3 façons de valider une requête :
Directement dans le controller en appelant la
méthode « validation ».
En ajoutant les annotations dans la déclaration des
paramètres de la méthode.
Dans le POJO en ajoutant les annotations, et en
ajoutant @valid dans la déclaration du pojo comme
paramètre de la méthode.
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Méthode 1
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Méthode 2
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Méthode 3
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Dans les templates
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Les validateurs :
Email : vérifie que le champ est une adresse mail
– validation.email(mail)
– @Email String mail
Equals : vérifie que le champ est égale à un autre (ex : password
confirmation)
– validation.equals(password, passwordConfirmation)
– @Equals(« passwordConfirmation ») String password
Future : vérifie que la date est dans le future (en fonction de la date du jour
ou de la date de référence passée en paramètre)
– validation.future(maDate) | validation.future(maDate, « 1971-12-31 »)
– @InFuture String maDate / @InFuture(« 1971-12-31 ») String maDate
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Les validateurs :
IsTrue : vérifie que le champs est à « true » (String ,Boolean ou
Number)
– validation.isTrue(agree)
– @IsTrue String agree
Match : Le champ valide la regex
– validation.match(abbreviation, "[A-Z]{3}")
– @Match("[A-Z]{3}") String abbreviation
Max : Vérifie que le champ n'est pas plus grand que la valeur
spécifiée (Number et String)
– validation.max(wordCount, 7500)
– @Max(7500) String wordCount
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Les validateurs :
MaxSize : taille maximum du String
– validation.maxSize(url, 2083) ;
– @MaxSize(2083) String value
Min : Vérifie que le champ est plus grand que la valeur spécifiée
(Number et String)
– validation.min(age, 18) ;
– @Min(18) Long age
MinSize : taille minimum du String
– validation.minSize(value, 42) ;
– @MinSize(42) String value
Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA.
La validation
Les validateurs :
Past : vérifie que la date est dans le passé (en fonction de la date du jour ou de la
date de référence passée en paramètre)
– validation.past(actualDepartureDate) ; / validation.past(expectedDepartureDate,
expectedArrivalDate);
– @Past String actualDepartureDate / @Past("1980-01-01") String birthDate
Range : min & max
– validation.range(wordCount, 17500, 40000) ;
– @Range(min = 17500, max = 40000) String wordCount
Required : le champ est obligatorie
– validation.required(value) ;
– @Required String value
Url : vérifie que le champ est une url valide
– @URL String address

Contenu connexe

Tendances

Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action Denys Chamberland
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?Frédéric Harper
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéNicolas Deverge
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework LaravelHoucem Hedhly
 
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com   Formation Scripting Bash avancé pour GNU/LinuxAlphorm.com   Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com Formation Scripting Bash avancé pour GNU/LinuxAlphorm
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EEjavalabsf
 

Tendances (17)

Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Netbeans Install
Netbeans InstallNetbeans Install
Netbeans Install
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Laravel Blade
Laravel BladeLaravel Blade
Laravel Blade
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
 
Présentation Dashing
Présentation DashingPrésentation Dashing
Présentation Dashing
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Introduction au Framework Laravel
Introduction au Framework LaravelIntroduction au Framework Laravel
Introduction au Framework Laravel
 
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com   Formation Scripting Bash avancé pour GNU/LinuxAlphorm.com   Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
 
Déploiement d'applications Java EE
Déploiement d'applications Java EEDéploiement d'applications Java EE
Déploiement d'applications Java EE
 

En vedette

Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2Samy Dindane
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play FrameworkWarren Zhou
 
Open Source Software and GitHub
Open Source Software and GitHubOpen Source Software and GitHub
Open Source Software and GitHubSamy Dindane
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The BasicsPhilip Langer
 
احدث أنظمة النداء العام والصوتيات الكورية jedia
احدث أنظمة النداء العام والصوتيات الكورية jediaاحدث أنظمة النداء العام والصوتيات الكورية jedia
احدث أنظمة النداء العام والصوتيات الكورية jediaManal Zain
 
Basque 2.0 and the Gipuzkoa Commons
Basque 2.0 and the Gipuzkoa CommonsBasque 2.0 and the Gipuzkoa Commons
Basque 2.0 and the Gipuzkoa CommonsNancy Proctor
 
York College(Cuny) Open House
York College(Cuny) Open HouseYork College(Cuny) Open House
York College(Cuny) Open HouseYorkTV
 
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...Innovation Nest VC
 
Presentación sobre el Gótico
Presentación sobre el GóticoPresentación sobre el Gótico
Presentación sobre el GóticoIES Villarrubia
 
Aprendizaje inverido
Aprendizaje inveridoAprendizaje inverido
Aprendizaje inveridogajamido
 
Oggetto Pop Vetrina
Oggetto Pop VetrinaOggetto Pop Vetrina
Oggetto Pop Vetrinataska
 
Presentación sobre el mojito
Presentación sobre el mojitoPresentación sobre el mojito
Presentación sobre el mojitoDamy_ana
 
xzProject pocket park
xzProject pocket parkxzProject pocket park
xzProject pocket parkdanielsong15
 
Presentación sobre Desarrollo Sostenible
Presentación sobre Desarrollo SosteniblePresentación sobre Desarrollo Sostenible
Presentación sobre Desarrollo Sostenibleomar_collins
 

En vedette (20)

Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play Framework
 
Open Source Software and GitHub
Open Source Software and GitHubOpen Source Software and GitHub
Open Source Software and GitHub
 
Play Framework: The Basics
Play Framework: The BasicsPlay Framework: The Basics
Play Framework: The Basics
 
Hepatitis c: Koga liječiti?
Hepatitis c: Koga liječiti?Hepatitis c: Koga liječiti?
Hepatitis c: Koga liječiti?
 
احدث أنظمة النداء العام والصوتيات الكورية jedia
احدث أنظمة النداء العام والصوتيات الكورية jediaاحدث أنظمة النداء العام والصوتيات الكورية jedia
احدث أنظمة النداء العام والصوتيات الكورية jedia
 
Basque 2.0 and the Gipuzkoa Commons
Basque 2.0 and the Gipuzkoa CommonsBasque 2.0 and the Gipuzkoa Commons
Basque 2.0 and the Gipuzkoa Commons
 
York College(Cuny) Open House
York College(Cuny) Open HouseYork College(Cuny) Open House
York College(Cuny) Open House
 
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...
Why building an organizations is not a piece of cake - Ola Pszczoła - SaaS Me...
 
Presentación sobre el Gótico
Presentación sobre el GóticoPresentación sobre el Gótico
Presentación sobre el Gótico
 
Hepatitis day2014
Hepatitis day2014Hepatitis day2014
Hepatitis day2014
 
Aprendizaje inverido
Aprendizaje inveridoAprendizaje inverido
Aprendizaje inverido
 
Oggetto Pop Vetrina
Oggetto Pop VetrinaOggetto Pop Vetrina
Oggetto Pop Vetrina
 
Presentación sobre Cáritas Zaragoza
Presentación sobre Cáritas ZaragozaPresentación sobre Cáritas Zaragoza
Presentación sobre Cáritas Zaragoza
 
Presentación sobre el mojito
Presentación sobre el mojitoPresentación sobre el mojito
Presentación sobre el mojito
 
xzProject pocket park
xzProject pocket parkxzProject pocket park
xzProject pocket park
 
Tp switch
Tp switchTp switch
Tp switch
 
Aspectos legales
Aspectos legalesAspectos legales
Aspectos legales
 
Presentación sobre Desarrollo Sostenible
Presentación sobre Desarrollo SosteniblePresentación sobre Desarrollo Sostenible
Presentación sobre Desarrollo Sostenible
 

Similaire à Formation Play! framework

Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 gitPape Diop
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009JUG Lausanne
 
Introduction Groovy / Grails - Cyril Picat - December 2009
Introduction Groovy / Grails - Cyril Picat - December 2009Introduction Groovy / Grails - Cyril Picat - December 2009
Introduction Groovy / Grails - Cyril Picat - December 2009JUG Lausanne
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continueStéphane HULARD
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Alphorm.com Formation Nagios et Cacti : Installation et Administration
Alphorm.com Formation Nagios et Cacti : Installation et AdministrationAlphorm.com Formation Nagios et Cacti : Installation et Administration
Alphorm.com Formation Nagios et Cacti : Installation et AdministrationAlphorm
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm
 
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTourDéployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTourPierre Fay
 
Mise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec OpenfireMise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec OpenfireAbdou Lahad SYLLA
 
Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009JUG Lausanne
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Silverlight 3.MSDays EPITA 11/06/2009
Silverlight 3.MSDays EPITA 11/06/2009Silverlight 3.MSDays EPITA 11/06/2009
Silverlight 3.MSDays EPITA 11/06/2009Frédéric Queudret
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache PulsarBruno Bonnin
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Industrialisation bar camp2010
Industrialisation bar camp2010Industrialisation bar camp2010
Industrialisation bar camp2010Lushkah911
 
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...Microsoft Technet France
 

Similaire à Formation Play! framework (20)

Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
 
Introduction Groovy / Grails - Cyril Picat - December 2009
Introduction Groovy / Grails - Cyril Picat - December 2009Introduction Groovy / Grails - Cyril Picat - December 2009
Introduction Groovy / Grails - Cyril Picat - December 2009
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Alphorm.com Formation Nagios et Cacti : Installation et Administration
Alphorm.com Formation Nagios et Cacti : Installation et AdministrationAlphorm.com Formation Nagios et Cacti : Installation et Administration
Alphorm.com Formation Nagios et Cacti : Installation et Administration
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et Configurer
 
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTourDéployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
Déployer Magento2 dans MS Azure avec #zendServer et #docker ! @DarkmiraTour
 
Mise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec OpenfireMise en place vidéoconférence + chat avec Openfire
Mise en place vidéoconférence + chat avec Openfire
 
Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009Maven2 - Philippe Kernevez - March 2009
Maven2 - Philippe Kernevez - March 2009
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Silverlight 3.MSDays EPITA 11/06/2009
Silverlight 3.MSDays EPITA 11/06/2009Silverlight 3.MSDays EPITA 11/06/2009
Silverlight 3.MSDays EPITA 11/06/2009
 
Stream processing avec Apache Pulsar
Stream processing avec Apache PulsarStream processing avec Apache Pulsar
Stream processing avec Apache Pulsar
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Industrialisation bar camp2010
Industrialisation bar camp2010Industrialisation bar camp2010
Industrialisation bar camp2010
 
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...
Windows Azure Media Services : des API pour encoder, multiplexer et difuser v...
 

Plus de Benoît Simard

Plus de Benoît Simard (6)

Paris meetup-rdf
Paris meetup-rdfParis meetup-rdf
Paris meetup-rdf
 
20161020 - Paris - Retour GC
20161020  - Paris - Retour GC20161020  - Paris - Retour GC
20161020 - Paris - Retour GC
 
technologie web- part4
technologie web- part4technologie web- part4
technologie web- part4
 
technologie web - part3
technologie web - part3technologie web - part3
technologie web - part3
 
technologie web - part2
technologie web - part2technologie web - part2
technologie web - part2
 
technologie web
technologie webtechnologie web
technologie web
 

Formation Play! framework

  • 1. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Play! Framework – Formation 
  • 2. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Quelques mots sur Play!
  • 3. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Historique 2007 Créé par Guillaume Bort 2008 Framework Open Source 2009 Version 1.0 en octobre 2010 Version 1.0.1 en janvier 2011 Version 1.1 en octobre
  • 4. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Un tour d'horizon Pas de compilation Respecte le protocole HTTP RESTFull Stateless Système de templating simple Groovy Framework MVC Rapide (exécution & développement) Extensible par des modules Pure JAVA !!!
  • 5. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La communauté Twitter http://twitter.com/playframework ~ 1600 followers ~ 500 tweets Google group http://groups.google.com/group/play-framework ~ 15000 messages ~ 1300 membres ~ 40 messages / jour Github http://github.com/playframework/play ~ 120 watchers
  • 6. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  framework web en Java
  • 7. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  web framework java  Alors qu'il existe déjà JSF Struts Spring MVC Wicket ...
  • 8. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  web framework java  « Java web frameworks are created by java developpers, not Web developpers » « Java developpers are building Java applications, not web applications »
  • 9. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  web framework java  Web VS middleware La complexité en Java est culturelle Interfaces Abstraction RMI EJB SOAP
  • 10. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  web framework java  WEB = REST
  • 11. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pourquoi un nouveau  web framework java  « Play ! Framework is the first reasonable Java web framework I have personnaly seen» Bret Taylor
  • 12. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les avantages de Play!
  • 13. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Cycle de Vie Framework J2EE Traditionnel
  • 14. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Cycle de Vie Avec Play!
  • 15. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les fonctionnalités Module de sécurité CRUD Validation Jobs asynchrones I18n Tests (unitaire & selenium) L'envoie de mail Webservices RESTFull services
  • 16. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les fonctionnalités Et avec les modules : OpenID, CAS Export en PDF Export Excel Rendre les CSS dynamiques Minifier Recherche … http://www.playframework.org/modules
  • 17. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les fonctionnalités Play! est compatible avec toutes les librairies Java. Play ! Intègre déjà : Hibernate Google Gson Commons (fileupload, httpclient, email, logging …) EhCache ...
  • 18. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. A la découverte de play!
  • 19. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Architecture
  • 20. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La structure d'une appli Créer une nouvelle application Play new monApplication Structure de l'application ./conf ./conf/routes ./conf/application.conf ./conf/messages ./test ./lib ./public ./app ./app/models ./app/controllers ./app/views
  • 21. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les routes
  • 22. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le fichier de configuration Configuration De la base de données Du logger Du cache Du serveur SMTP Des modules System settings
  • 23. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le fichier de configuration
  • 24. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le fichier de configuration Mais comment on fait pour tous travailler avec le même fichier de configuration, alors que nos environnements ne sont pas identique ? play id
  • 25. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. A la découverte de play ! : Le Model
  • 26. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le model Définition en JPA Beaucoup d'annotation ! Que ce soit pour le mapping avec la base de données ou pour la structure / validation des champs – @Entity – @OneToMany – @Column – … (pour la validation nous verrons plus loin) Doit étendre de la classe « Model »
  • 27. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le model
  • 28. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le model Tout est public ! Il n'y a pas de getter/setter Play : génère les getters/setters au runtime Vous pouvez surcharger les getters/setters
  • 29. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le model La classe « Model » est un Helper
  • 30. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Le model Import / Export de la base en YML Import natif dans play Export avec le module YML(version 1.0) – http://github.com/sim51/logisima-play-yml
  • 31. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. A la découverte de play! : Les controllers
  • 32. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers Doit étendre la classe « Controller » Possède que des méthodes public static void Une méthode est appelée selon une route Un controller donne accès à plusieurs méthode de rendu Json Xml Pdf … On peut chainer les actions Redirection En appelant directement la méthode : Application.index()
  • 33. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers
  • 34. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers Les paramètres d'entrées des Controlleurs Ce sont les variables en GET / POST / DELETE / PUT Les GET peuvent être défini dans le fichier de routes Il n'y pas que des types simples, on peut y mettre des objets de notre model. Ces objets seront créée via les paramètres de la request. Exemple : – resto.name – resto.url – ...
  • 35. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers Les paramètres de sorties des controlleurs Il suffit d'ajouter les objets à la méthode render exemple : – render("Public/resto/show.html", resto, randomID) ; Ou d'appeler la méthode renderArgs – renderArgs.put(« resto », resto); Sinon, il y a les différents scopes
  • 36. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les scopes Application Session Stocké dans un cookie sécurisé et accéssible durant toute la session de l'utilisateur (4Kb). Flash Stocké dans un cookie sécurisé et uniquement accessible par la prochaine requête (4Kb). Request Pour tout le reste, il y a le cache !
  • 37. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers Les fichiers de rendu Par défaut Play! cherche le fichier suivant : – app/views/[Classe Name]/[Methode Name].html – app/views/Application/index.html Mais on peut spécifier un fichier – render("Public/resto/show.html", resto);
  • 38. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers C'est bien beau de ne plus avoir la « servlet-api », mais comment je fais pour faire un filtre ?
  • 39. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers Il existe les intercepteurs ! @Before – Exécute la méthode annotée avant chaque action du Controller. On peut exclure certaine action (unless={« login », « logout »}), ou définir seulement quelques actions (only={« login », « logout »}) @After – Exécute la méthode annotée s'exécute après chaque action du Controller.
  • 40. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les controllers @Finally – Exécute la méthode annotée après chaque résultat d'action du Controller. @With – Permet de déléguer les intercepteur à une classe. Les intercepteurs s'appliquent même aux sous-classes !
  • 41. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. A la découverte de play! : Les templates
  • 42. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates La Syntax Expressions : ${ … } – Permet d'afficher une variable: ${resto.name} Messages : &{ … } – I18N. Affiche la valeur correspondant à la clef (définie dans le fichier conf/messages) Actions (reverse Route): – @{ …} : génère l'URI de l'action : @{Application.index()} – @@{ …} : génère une URL absolue Commentaires : *{ … }* Scripts : %{ … }%
  • 43. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates Les décorateurs Fichier html de template parent Un template hérite du décorateur #{get /}, #{set /}, #{extend /} & #{doLayout /}
  • 44. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates Les Tags : #{tagName /} Un tag est un fragment de HTML qui peut être appelé avec des paramètres. Un tag correspond à un fichier devant absolument se trouver dans le répertoire « app/views/tags », et le nom du tag correspond au nom du fichier. Les paramètres passés au tag sont accessibles dans le tag via _[le nom de mon paramètre]
  • 45. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates Les Tags : #{tagName /} Exemple d'appel : Le fichier article.html :
  • 46. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates Les extensions Certaines méthodes sont ajoutés au objets dans les templates : – Date|format() : pour formater une date : ${myDate.format('dd MMMM yyyy hh:mm:ss')} – String|escapeHtlm() : pour échapper le code html – String|nl2br() : remplace les sauts de ligne par des <br/> – String|raw() : pour ne pas échapper le code html. – … Il est à noter que Play ! échappe automatiquement tous les textes. http://www.playframework.org/documentation/1.1/javaextensions
  • 47. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les templates Les extensions personnalisées Il est possible de créer ses propres extensions ! Il suffit de créer une classe – qui étend de JavaExtensions – Contenant des méthodes public static
  • 48. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. A la découverte de play! : Les jobs
  • 49. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Les Jobs Doit étendre la classe « Job » @Every(«1d») @On(«0 0 12 * * *) – CRON expression @OnApplicationStart
  • 50. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. Pour aller plus loin ...
  • 51. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation
  • 52. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation 3 façons de valider une requête : Directement dans le controller en appelant la méthode « validation ». En ajoutant les annotations dans la déclaration des paramètres de la méthode. Dans le POJO en ajoutant les annotations, et en ajoutant @valid dans la déclaration du pojo comme paramètre de la méthode.
  • 53. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Méthode 1
  • 54. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Méthode 2
  • 55. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Méthode 3
  • 56. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Dans les templates
  • 57. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Les validateurs : Email : vérifie que le champ est une adresse mail – validation.email(mail) – @Email String mail Equals : vérifie que le champ est égale à un autre (ex : password confirmation) – validation.equals(password, passwordConfirmation) – @Equals(« passwordConfirmation ») String password Future : vérifie que la date est dans le future (en fonction de la date du jour ou de la date de référence passée en paramètre) – validation.future(maDate) | validation.future(maDate, « 1971-12-31 ») – @InFuture String maDate / @InFuture(« 1971-12-31 ») String maDate
  • 58. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Les validateurs : IsTrue : vérifie que le champs est à « true » (String ,Boolean ou Number) – validation.isTrue(agree) – @IsTrue String agree Match : Le champ valide la regex – validation.match(abbreviation, "[A-Z]{3}") – @Match("[A-Z]{3}") String abbreviation Max : Vérifie que le champ n'est pas plus grand que la valeur spécifiée (Number et String) – validation.max(wordCount, 7500) – @Max(7500) String wordCount
  • 59. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Les validateurs : MaxSize : taille maximum du String – validation.maxSize(url, 2083) ; – @MaxSize(2083) String value Min : Vérifie que le champ est plus grand que la valeur spécifiée (Number et String) – validation.min(age, 18) ; – @Min(18) Long age MinSize : taille minimum du String – validation.minSize(value, 42) ; – @MinSize(42) String value
  • 60. Auteur : Benoît Simard – Licence : Creative Commons BY-NC-SA. La validation Les validateurs : Past : vérifie que la date est dans le passé (en fonction de la date du jour ou de la date de référence passée en paramètre) – validation.past(actualDepartureDate) ; / validation.past(expectedDepartureDate, expectedArrivalDate); – @Past String actualDepartureDate / @Past("1980-01-01") String birthDate Range : min & max – validation.range(wordCount, 17500, 40000) ; – @Range(min = 17500, max = 40000) String wordCount Required : le champ est obligatorie – validation.required(value) ; – @Required String value Url : vérifie que le champ est une url valide – @URL String address