Domanda

Ci sono due modi per creare tag doganali con il quadro di gioco.

  1. Con la definizione di un modello di Groovy in app / vedere / tag
  2. Direttamente in puro Java per avere una classe estendere FastTags

L'ultima NON è documentata.

È stato utile?

Soluzione

Quindi, simile a come JavaExtensions lavoro estendendo la classe JavaExtensions, per creare un FastTag è necessario creare una classe che estende FastTags. Ogni metodo che si desidera eseguire come un tag necessità di conformarsi alla seguente struttura metodo.

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

Si noti la sottolineatura prima del nome del tag.

Per capire come costruire un tag vero e proprio, il modo più semplice è quello di guardare il codice sorgente per un FastTag, e vedere uno in azione.

Questa è la retta fonte da hub git. https://github.com/playframework/play /blob/master/framework/src/play/templates/FastTags.java

Qui di seguito ci sono alcuni che ho copiato, in modo che posso spiegare come funziona.

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

Quindi, questo primo metodo è il tag alla lettera, e semplicemente chiama il metodo toString sui JavaExtensions, e passa nel corpo del tag. Il corpo del tag sarebbe nulla tra il tag di apertura e chiusura. Quindi

<verbatim>My verbatim</verbatim>

Il valore corpo sarebbe

My verbatim

Il secondo esempio, è leggermente più complessa. Si tratta di un tag che si basa su un tag principale per la funzione.

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

Questo codice funziona tramite emissione di un tag HTML un'opzione, e imposta il valore selezionato, per controllare che il valore selezionato dal tag genitore. Le prime 3 linee appena ottenere dati, e impostare i dati pronti per l'uscita. Poi, gli ultimi 3 linee in uscita il risultato del tag.

Ci sono molti esempi più nel codice sorgente che ho collegato a, con vari gradi di complessità, ma spero che questo sarà un buon punto di partenza per voi.

Per garantire che i tag non siano in conflitto tra i progetti, o con le modifiche di base Play, è possibile impostare gli spazi dei nomi, usando l'annotazione livello di classe @ FastTags.Namespace.

Quindi, per un tag ciao, in uno spazio dei nomi di my.tags, si farebbe il seguente

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

e poi nei modelli, si dovrebbe fare riferimento al tag ciao come

#{my.tags.hello/}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top