Pregunta

Hay dos maneras de crear etiquetas de aduana de un marco de juego.

  1. Al definir una plantilla maravilloso en app / ver / etiquetas
  2. Directamente en java puro por tener una clase extienden FastTags

La última no está documentada.

¿Fue útil?

Solución

Por lo tanto, similar a cómo funcionan JavaExtensions extendiendo la clase JavaExtensions, para crear un FastTag es necesario crear una clase que se extiende FastTags. Cada método que desea ejecutar como las necesidades de etiquetas para ajustarse a la siguiente estructura método.

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

Nota el subrayado antes del nombre de la etiqueta.

Para entender cómo construir una etiqueta real, la manera más fácil es mirar el código fuente de un FastTag, y ver uno en acción.

Aquí es la recta fuente desde el cubo git. https://github.com/playframework/play /blob/master/framework/src/play/templates/FastTags.java

A continuación se presentan unos cuantos he copiado, de modo que pueda explicar cómo funciona este.

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

Por lo tanto, este primer método es la etiqueta textualmente , y simplemente llama al método toString en los JavaExtensions, y pasa en el cuerpo de la etiqueta. El cuerpo de la etiqueta podría ser cualquier cosa entre la etiqueta de apertura y cierre. Así

<verbatim>My verbatim</verbatim>

El valor cuerpo sería

My verbatim

El segundo ejemplo, es ligeramente más compleja. Es una etiqueta que se basa en una etiqueta principal de funcionar.

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>");
}

Este código funciona mediante la emisión de una etiqueta de opción HTML, y establece el valor seleccionado, mediante la comprobación de qué valor se selecciona del código padre. Las 3 primeras líneas acaba de obtener los datos y configurar los datos preparado para la salida. A continuación, los finales 3 líneas envía el resultado de la etiqueta.

Hay muchos ejemplos más en el código fuente que he vinculado a, con diferentes grados de complejidad, pero espero que esto será un buen punto de partida para usted.

Para asegurar que las etiquetas no están en conflicto entre proyectos, o con las etiquetas núcleo de reproducción, puede configurar espacios de nombres, utilizando la anotación nivel de clase @ FastTags.Namespace.

Por lo tanto, para una etiqueta hola, en un espacio de nombres de my.tags, que haría lo siguiente

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

y luego en sus plantillas, que haría referencia a la etiqueta hola como

#{my.tags.hello/}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top