Adakah yang bisa menjelaskan cara menggunakan FastTags

Ada dua cara untuk membuat tag khusus dengan kerangka permainan.

  1. Dengan mendefinisikan template asyik di app/view/tags
  2. Langsung di java murni dengan memiliki kelas extend FastTags

Yang terbaru TIDAK didokumentasikan.


person Olivier Refalo    schedule 09.11.2010    source sumber


Jawaban (1)


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/}
person Codemwnci    schedule 09.11.2010
comment
Sangat bagus, sebagai tambahan, Anda dapat menjelaskan anotasi kelas @FastTags.Namespace(mytags), yang akan menjadi praktik yang baik untuk mencegah tabrakan nama. - person niels; 09.11.2010
comment
Terima kasih! bisakah Anda memberikan detail tentang cara memunculkan kesalahan dari sebuah tag? katakanlah parameter input hilang... bagaimana cara menghasilkan kesalahan/pengecualian? - person Olivier Refalo; 10.11.2010
comment
Lihatlah baris 147 di tautan github yang saya posting. Ini menunjukkan contoh pengecualian eksekusi templat yang digunakan dalam kasus serupa dengan yang Anda tentukan. - person Codemwnci; 10.11.2010
comment
mengerti, terima kasih, untuk referensi : throw new TemplateExecutionException(template.template, fromLine, Harap tentukan kunci kesalahan, new TagInternalException(Harap tentukan kunci kesalahan)); - person Olivier Refalo; 10.11.2010
comment
penjelasan yang sangat jelas, menurut saya ini harus langsung dimainkan! dokumentasi - person opensas; 10.11.2010
comment
Menambahkan tiket untuk menambahkan ini ke dokumentasi resmi play.lighthouseapp.com/projects /57987-play-framework/tiket/ - person niels; 10.11.2010
comment
Sebenarnya ada masalah dengan memunculkan pengecualian di atas, template.template tidak terlihat adalah pkg khusus. Saya membuka tiket play.lighthouseapp.com/projects/57987/tickets/ - person Olivier Refalo; 10.11.2010