Dans le tutorial précédent, on a vu qu’un Controller Play peut renvoyer différents type de données grâce notamment à des méthodes spécialisées comme renderJSON ou renderBinary:
Play – Controller et les variantes de render() (JSON, XML, fichier, …)
Vous allez aussi utiliser les Controller Play pour servir les pages HTML de votre site web. En effet, c’est Play votre serveur web (enfin Netty), qui devra répondre du contenu HTML lorsque vous l’interrogez sur une certaine URL (une « route »).
Dans cet article, on va utiliser la notion de « Template » dans Play. Un Template est un fichier à l’extension « .html », qui va contenir un mélange de HTML (+JavaScript éventuellement) et du Groovy (un peu comme Java) qui vous permet de réaliser des actions sur ce Template (boucles, conditions, …). Voici un petit exemple de Template:
<h1>Client ${client.name}</h1> <ul> #{list items:client.accounts, as:'account' } <li>${account}</li> #{/list} </ul>
Ce template devra être « interprété » pour au final cracher du HTML. C’est une étape que l’on appelle « exécution » d’un template. Celle-ci va être réalisée par vos Controller.
Notez que vous pouvez aussi utiliser les templates pour rendre autre chose que du HTML, du JSON par exemple. Un template permet de faciliter la génération de contenu complexe.
Conventions de nommage pour la liaison Controller / Template
Admettons que vous ayez l’instruction suivante:
public class Clients extends Controller { public static void index() { render(); } }
Votre Controller se trouve donc à l’emplacement /app/controllers/Clients.java. Lorsque vous allez appeler la méthode render(), Play va automatiquement aller cherche un Template à l’emplacement:
app/views/Clients/index.html
On verra plus loin que l’on peut bien sûr changer ce comportement par défaut et appeler un autre template.
Faire passer de la donnée du Controller vers le Template
Dans l’exemple plus haut, on a simplement appelé la méthode « render() ». Le template sera donc exécuté sans aucune donnée en entrée. Ce que l’on va plutôt chercher à faire, c’est passer des données au template (une liste de Clients par exemple) et laisse le template faire le rendu de cette liste de clients. Pour cela, vous avez deux méthodes.