Question

Il y a deux façons de créer des étiquettes douanières avec le cadre de jeu.

  1. En définissant un modèle groovy dans app / view / balises
  2. Directement en java pur ayant une classe prolonger FastTags

Le dernier est pas documenté.

Était-ce utile?

La solution

Alors, semblable à la façon JavaExtensions travail en étendant la classe JavaExtensions, pour créer un FastTag vous devez créer une classe qui étend FastTags. Chaque méthode que vous souhaitez exécuter en tant que besoins d'étiquette pour se conformer à la structure de la méthode suivante.

public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)

Notez le trait de soulignement avant le nom de la balise.

Pour comprendre comment construire une balise réelle, la meilleure façon est de regarder le code source pour une FastTag et voir une en action.

Voici la droite source du moyeu git. https://github.com/playframework/play /blob/master/framework/src/play/templates/FastTags.java

Voici quelques j'ai copié, afin que je puisse expliquer comment cela fonctionne.

public static void _verbatim(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
    out.println(JavaExtensions.toString(body));
}

Ainsi, cette première méthode est la balise verbatim , et appelle simplement la méthode toString sur les JavaExtensions, et passe dans le corps de l'étiquette. Le corps de l'étiquette serait quelque chose entre la balise ouvrir et fermer. Donc,

<verbatim>My verbatim</verbatim>

La valeur corporelle serait

My verbatim

Le deuxième exemple est légèrement plus complexe. Il est une étiquette qui repose sur une étiquette de parent à la fonction.

public static void _option(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
    Object value = args.get("arg");
    Object selectedValue = TagContext.parent("select").data.get("selected");
    boolean selected = selectedValue != null && value != null && selectedValue.equals(value);
    out.print("<option value=\"" + (value == null ? "" : value) + "\" " + (selected ? "selected=\"selected\"" : "") + "" + serialize(args, "selected", "value") + ">");
    out.println(JavaExtensions.toString(body));
    out.print("</option>");
}

Ce code fonctionne en émettant une balise option HTML et définit la valeur sélectionnée, en vérifiant que la valeur est choisie dans la balise parent. Les 3 premières lignes se juste données et mettre en place les données prêtes à la sortie. Ensuite, les 3 dernières lignes sorties le résultat de la balise.

Il y a des exemples nombreux de plus dans le code source, je suis lié à, avec des degrés de complexité, mais nous espérons que ce sera un bon point de départ pour vous.

Pour vous assurer que vos balises ne sont pas incompatibles entre les projets, ou avec les balises de jeu de base, vous pouvez configurer les espaces de noms, en utilisant l'annotation de niveau de classe @ FastTags.Namespace.

Ainsi, pour un tag bonjour, dans un espace de noms my.tags, vous devez faire ceci

@FastTags.Namespace("my.tags") 
public class MyFastTag extends FastTags {
    public static void _hello (Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
        ...
    }
}

puis dans vos modèles, vous référencer la balise bonjour comme

#{my.tags.hello/}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top