java - starter - ¿Alguien puede explicar cómo usar FastTags?
play framework tutorial (1)
Por lo tanto, similar a cómo funciona JavaExtensions extendiendo la clase JavaExtensions, para crear un FastTag necesita crear una clase que amplíe FastTags. Cada método que desee ejecutar como una etiqueta debe ajustarse a la siguiente estructura de método.
public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)
Tenga en cuenta el guión bajo antes del nombre de la etiqueta.
Para comprender cómo crear una etiqueta real, la forma más fácil es mirar el código fuente de una FastTag y ver una en acción.
Aquí está la fuente directamente desde git hub. https://github.com/playframework/play/blob/master/framework/src/play/templates/FastTags.java
A continuación hay unos pocos que he copiado, para que pueda explicar cómo funciona esto.
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 literal , y simplemente llama al método toString en JavaExtensions, y lo pasa en el cuerpo de la etiqueta. El cuerpo de la etiqueta sería cualquier cosa entre la etiqueta abrir y cerrar. Asi que
<verbatim>My verbatim</verbatim>
El valor corporal sería
My verbatim
El segundo ejemplo, es un poco más complejo. Es una etiqueta que depende de una etiqueta principal para 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 al generar una etiqueta de opción HTML y establece el valor seleccionado al verificar qué valor se selecciona de la etiqueta padre. Las primeras 3 líneas solo obtienen datos y configuran los datos listos para la salida. Luego, las 3 líneas finales generan el resultado de la etiqueta.
Hay muchos más ejemplos en el código fuente al que me he vinculado, con diversos grados de complejidad, pero espero que este sea un buen punto de partida para usted.
Para asegurarse de que sus etiquetas no entren en conflicto entre proyectos, o con las etiquetas básicas de Play, puede configurar espacios de nombres, utilizando la anotación de nivel de clase @ FastTags.Namespace.
Entonces, para una etiqueta de saludo, en un espacio de nombre de my.tags, harías 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, haría referencia a la etiqueta de saludo como
#{my.tags.hello/}
Hay dos formas de crear etiquetas de aduana con el marco de juego.
- Al definir una plantilla maravillosa en la aplicación / vista / etiquetas
- Directamente en java puro al tener una clase extender FastTags
Lo último NO está documentado.