Menukar Direktori Templat Thymeleaf di Spring Boot

1. Pengenalan

Thymeleaf adalah mesin templat yang dapat kita gunakan untuk aplikasi Spring Boot kami. Seperti banyak perkara, Spring Boot menyediakan lokasi lalai di mana ia menjangkakan templat kami .

Dalam tutorial ringkas ini, kita akan melihat bagaimana kita dapat mengubah lokasi templat. Setelah melakukannya, kita akan belajar bagaimana mempunyai beberapa lokasi.

2. Persediaan

Untuk menggunakan Thymeleaf, kita perlu menambahkan starter Spring Boot yang sesuai ke pom.xml kami :

 org.springframework.boot spring-boot-starter-thymeleaf 2.2.2.RELEASE 

3. Menukar Lokasi Lalai

Secara lalai, Spring Boot mencari templat kami dalam src / main / resources / templat . Kami boleh meletakkan templat kami di sana dan menyusunnya di sub-direktori dan tidak mempunyai masalah.

Sekarang, mari kita bayangkan bahawa kita mempunyai syarat bahawa semua templat kita berada dalam direktori yang disebut templates-2 .

Mari buat templat untuk bertanya khabar dan memasukkannya ke dalam src / main / resources / templates-2 :

    Enums in Thymeleaf   

Hello from 'templates/templates-2'

Kami juga memerlukan pengawal:

@GetMapping("/hello") public String sayHello() { return "hello"; }

Dengan penyediaan asas itu, mari kita konfigurasikan Spring Boot untuk menggunakan direktori templates-2 kami dengan mengesampingkan harta tanah di application.properties :

spring.thymeleaf.prefix=classpath:/templates-2/

Sekarang, apabila kita memanggil HelloController , kita akan melihat ucapan dari hello.html .

4. Menggunakan Pelbagai Lokasi

Setelah mengetahui cara mengubah lokasi lalai, mari kita lihat bagaimana kita dapat menggunakan beberapa lokasi templat.

Untuk melakukan ini, mari kita buat kacang ClassLoaderTemplateResolver :

@Bean public ClassLoaderTemplateResolver secondaryTemplateResolver() { ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver(); secondaryTemplateResolver.setPrefix("templates-2/"); secondaryTemplateResolver.setSuffix(".html"); secondaryTemplateResolver.setTemplateMode(TemplateMode.HTML); secondaryTemplateResolver.setCharacterEncoding("UTF-8"); secondaryTemplateResolver.setOrder(1); secondaryTemplateResolver.setCheckExistence(true); return secondaryTemplateResolver; }

Dalam kacang adat kami, kami menetapkan awalan kami ke direktori templat sekunder yang kami gunakan: templates-2. Kami juga menetapkan bendera CheckExistance ke true . Ini adalah kunci untuk membolehkan penyelesai beroperasi dalam rantai.

Dengan ini dikonfigurasikan, permohonan kami boleh menggunakan template dari lalai sumber / / template utama direktori dan utama / sumber / template-2 .

5. Kesalahan

Semasa kami bekerja dengan Thymeleaf, kami mungkin melihat ralat ini:

Error resolving template [hello], template might not exist or might not be accessible by any of the configured Template Resolvers

Kami melihat mesej ini apabila Thymeleaf tidak dapat mencari templat untuk beberapa sebab. Mari lihat beberapa kemungkinan sebab untuk ini dan bagaimana memperbaikinya.

5.1. Tipu dalam Pengawal

Kita sering dapat melihat ralat ini kerana kesalahan ketik yang mudah. Perkara pertama yang perlu diperiksa adalah bahawa nama fail kami tolak peluasan dan templat yang kami minta dalam pengawal kami sama. Sekiranya kita menggunakan subdirektori, kita perlu memastikan bahawa itu juga betul.

Selain itu, masalahnya boleh menjadi masalah dengan sistem operasi tertentu. Windows tidak peka huruf besar-kecil, tetapi sistem operasi lain. Kita harus melihatnya sekiranya semuanya berfungsi dengan baik, katakanlah, pada mesin Windows tempatan kita, tetapi tidak begitu kita menggunakan.

5.2. Termasuk Sambungan Fail di Pengawal

Oleh kerana fail kami biasanya mempunyai peluasan, wajar jika menyertakannya ketika kami mengembalikan templat kami di pengawal. Thymeleaf menambahkan akhiran secara automatik, jadi kita harus mengelakkannya .

5.3. Tidak Menggunakan Lokasi Lalai

Kami juga akan melihat ralat ini jika kami meletakkan templat kami di tempat lain selain src / main / resources / templat . Sekiranya kita ingin menggunakan lokasi yang berbeza, kita perlu menetapkan sifat spring.thymeleaf.prefix atau membuat kacang ClassLoaderTemplateResolver kita sendiri untuk menangani beberapa lokasi.

6. Kesimpulannya

Dalam tutorial ringkas ini, kami mengetahui mengenai lokasi templat Thymeleaf. Pertama, kami melihat cara mengubah lokasi lalai dengan menetapkan harta tanah. Kemudian kami teruskan dengan membuat ClassLoaderTemplateResolver kami sendiri untuk menggunakan beberapa lokasi.

Kami selesai dengan perbincangan mengenai kesilapan yang akan kami lihat ketika Thymeleaf tidak dapat menemui templat kami dan bagaimana menyelesaikannya.

Seperti biasa, kod contoh boleh didapati di GitHub.