Voici un moyen simple d’utiliser les GSP de Grails pour construire des templates réutilisables à partir de fichiers externes à l’application (pour des mails, des fichiers d’exports, etc…)
La première étape consiste à créer une GSP qui définit le template. Il faut noter qu’aucun tag spécial ne sera interprété de cette manière. Voici un exemple de fichier VCARD pour importer un contact (_vcard.gsp) :
BEGIN:VCARD
VERSION:2.1
N:${personne.nom};${personne.prenom};;${personne.civilite}
FN:${personne.civilite} ${personne.prenom} ${personne.nom}
TITLE:${personne.poste}
TEL;WORK;VOICE:${personne.telephonePro}
EMAIL;INTERNET:${personne.email}
END:VCARD
Ensuite il faut ajouter une petite méthode qui se chargera d’associer le template aux données grâce au moteur de template de Groovy :
class MaClasseUtilitaire {
static SimpleTemplateEngine engine = new SimpleTemplateEngine()
static generateFromGSP(String templateFilename, model) throws Exception {
Template template = engine.createTemplate(new File(templateFilename))
return template.make(model).toString()
}
}
Et enfin il ne reste plus qu’à effectuer l’appel depuis un bout de code Groovy, dans un controller par exemple :
def maVcard
Personne monContact = Personne.findByName(’lorenzo’)
maVcard = MaClasseUtilitaire.generateFromGSP(”_vcard.gsp”,['personne':monContact])
C’est tout.. la variable maVcard contient le template alimenté avec les données de monContact, il ne reste plus qu’à l’envoyer au navigateur pour la télécharger par exemple..
Ce n’est pas forcément mis en évidence dans la documentation mais l’utilisation de GSP internes à l’application grails pour les templates est encore plus simple. Il suffit de procéder de la même façon que depuis une GSP classique, les méthodes de la taglib étant disponibles. Voici le même résultat que l’exemple ci dessus, mais avec une GSP située dans le projet :
Personne monContact = Personne.findByName(’lorenzo’)
vcard = g.render(template: “/mesTemplates/vcard”, model: ['personne':monContact])
Other Languages:
