Ada dua cara untuk membuat tag khusus dengan kerangka permainan.
- Dengan mendefinisikan template asyik di app/view/tags
- Langsung di java murni dengan memiliki kelas extend FastTags
Yang terbaru TIDAK didokumentasikan.
Ada dua cara untuk membuat tag khusus dengan kerangka permainan.
Yang terbaru TIDAK didokumentasikan.
Jadi, serupa dengan cara kerja JavaExtensions dengan memperluas kelas JavaExtensions, untuk membuat FastTag Anda perlu membuat kelas yang memperluas FastTag. Setiap metode yang ingin Anda jalankan sebagai tag harus sesuai dengan struktur metode berikut.
public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine)
Perhatikan garis bawah sebelum nama tag.
Untuk memahami cara membuat tag sebenarnya, cara termudah adalah dengan melihat kode sumber FastTag, dan melihatnya beraksi.
Ini sumbernya langsung dari git hub. https://github.com/playframework/play/blob/master/framework/src/play/templates/FastTags.java
Di bawah ini beberapa yang telah saya salin, sehingga saya dapat menjelaskan cara kerjanya.
public static void _verbatim(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
out.println(JavaExtensions.toString(body));
}
Jadi, metode pertama ini adalah tag verbatim, dan cukup memanggil metode toString pada JavaExtensions, dan meneruskannya ke badan tag. Badan tag bisa berupa apa saja di antara tag pembuka dan penutup. Jadi
<verbatim>My verbatim</verbatim>
Nilai tubuh akan menjadi
My verbatim
Contoh kedua, sedikit lebih rumit. Ini adalah tag yang bergantung pada tag induk untuk berfungsi.
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>");
}
Kode ini bekerja dengan mengeluarkan tag opsi HTML, dan menetapkan nilai yang dipilih, dengan memeriksa nilai mana yang dipilih dari tag induk. 3 baris pertama hanya mengambil data, dan menyiapkan data yang siap untuk dikeluarkan. Kemudian, 3 baris terakhir menampilkan hasil tag.
Masih banyak lagi contoh dalam kode sumber yang telah saya tautkan, dengan tingkat kerumitan yang berbeda-beda, namun semoga ini menjadi titik awal yang baik untuk Anda.
Untuk memastikan bahwa tag Anda tidak bertentangan antar proyek, atau dengan tag Play inti, Anda dapat menyiapkan namespace, menggunakan anotasi tingkat kelas @FastTags.Namespace.
Jadi, untuk tag hello, di namespace my.tags, Anda dapat melakukan hal berikut
@FastTags.Namespace("my.tags")
public class MyFastTag extends FastTags {
public static void _hello (Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
...
}
}
dan kemudian di templat Anda, Anda akan mereferensikan tag hello sebagai
#{my.tags.hello/}