Groovy and Grails

Créer une application avec Grails

Les commandes grails

Voici les différentes commandes qui servent à créer une application avec Grails.




Le scaffolding

Le mot "scaffolding" signifie échafaudage en anglais. C'est le nom de la méthode par laquelle les vues, les domaines, et les contrôleurs sont générés.

Pour chaque domaine, voici le type de vues et d'actions qui sont implémentées par défaut :

Le scaffolding peut être :


Voici une capture vidéo démontrant la force du scaffolding :




Controller

Le contrôleur est la classe qui reçoit la requête de l'utilisateur et qui, en fonction de l'action demandée, va effectuer un traitement. Ces traitements peuvent être sous-traités par la suite à un service.

Pour gérer quelle est l'action et quel contrôleur est appelé Grails se base sur le formatage de l'URL : http://<...>/controller/action/

Des exemples complets de contrôleurs sont disponibles en annexe.




Domain

Les classes de domaine servent à modéliser les données et a établir les relations avec les autres domaines. Cela permet d'établir le mapping entre les Objets et le schéma Relationel.
Elle définissent le comportement de l’application et facilite la validation des formulaires.

Il est possible d'effectuer des requêtes de base sur les domaines.
On trouve sur chaque domaines des méthodes get(), save(), list(), findByFirstname(), etc...
Ces méthodes n'ont jamais été définies par le développeur, mais elles existent grâce au MOP.




Validation

Il est possible de contrôler la validation des formulaires depuis le fichier qui définit le domaine.
Des contraintes existent par défaut. L'utilisation d'expressions régulières en est un exemple. On peut aussi créer nos propres contraintes.

Voici un exemple de définition de contrainte :

Ici, on vérifie que :

Voici les erreurs que l'ont peut obtenir si le formulaire est mal rempli.

Les messages d'erreurs peuvent être personnalisés à l'aide d'un fichier d'internationalisation.




Les services

Les services sont des objets Groovy chargés d'effectuer un traitement spécifique. Ils ont la particularité d'avoir une durée de vie plus ou moins longue selon le "scope" qu'on leur définit.
Voici les différents scope que l'on peut avoir (Du plus long au plus court) :


Voici l'exemple d'un service d'envoi de mails de confirmation d'inscription. Ce service a une durée de vie infinie car il a un scope "singleton". Il utilise lui-même un autre service fourni par Spring : "mailService".

class EmailConfirmationService implements InitializingBean, ApplicationContextAware {


static scope="singleton"

boolean transactional = true

ApplicationContext applicationContext;

def mailService;

Template template;


void afterPropertiesSet(){

def userTemplate = applicationContext.getResource("emailConfirmation.gtpl").getFile();

SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();

template = templateEngine.createTemplate(userTemplate);

}

void send(Student student){

EmailToken token = new EmailToken(student:student, controller:"student", action:"complete");

token.save();

def binding = [ 'student' : student, 'token' : token, 'serverURL' : ConfigurationHolder.config.grails.serverURL ]

def mailHtml = template.make(binding);

mailService.sendMail {

to "${student?.firstname} ${student?.lastname} <${student.emailAddress}>"

subject "Inscription : ${student?.firstname} ${student?.lastname}"

html mailHtml;

}

}

}




Les vues

Les vues sont représentées par des fichiers GSP (Groovy Server Page).
Elles sont similaires aux pages JSP. La différence vient du fait qu'on peut insérer du code Groovy.

On constate dans l'arborescence qu'il y a une vue dédiée à chaque action.

Un fichier permettant de décrire le design principal est présent dans le répertoire layouts. Il est utilisé par SiteMesh pour décorer les pages.




La taglib Grails

La TagLib fournie par Grails permet de créer des applications web riches. Beaucoup de ces tags utilisent l'Ajax.
Certains sont basés sur des framework javascript tel que "prototype" ou "dojo".

Voici ce que l'on peut réaliser comme type de formulaires grâce à cette taglib.




Les plugins

Une liste d’extensions est disponible sur le site de Grails.

Il est aussi possible de créer sa propre extension.

L'installation est simple. Elle se fait en utilisant un système de repository. C'est assez similaire à la commande apt-get de Debian.
En voici une démonstration :