Mengubah Direktori Template Thymeleaf di Spring Boot

1. Perkenalan

Thymeleaf adalah mesin templat yang dapat kita gunakan untuk aplikasi Spring Boot. Seperti banyak hal lainnya, Spring Boot menyediakan lokasi default yang diharapkan dapat menemukan template kami .

Dalam tutorial singkat ini, kita akan melihat bagaimana kita bisa mengubah lokasi templat. Setelah kita melakukannya, kita akan belajar bagaimana memiliki banyak lokasi.

2. Penyiapan

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

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

3. Mengubah Lokasi Default

Secara default, Spring Boot mencari template kita di src / main / resources / templates . Kami dapat meletakkan templat kami di sana dan mengaturnya di sub-direktori dan tidak memiliki masalah.

Sekarang, mari kita bayangkan bahwa kita memiliki persyaratan bahwa semua template kita berada dalam direktori yang disebut templates-2 .

Mari buat template untuk menyapa dan taruh di src / main / resources / templates-2 :

    Enums in Thymeleaf   

Hello from 'templates/templates-2'

Kami juga membutuhkan pengontrol:

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

Dengan pengaturan dasar tersebut, mari kita konfigurasikan Spring Boot untuk menggunakan direktori templates-2 kita dengan menimpa properti di application.properties :

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

Sekarang, ketika kita memanggil HelloController kita, kita akan melihat salam kita dari hello.html .

4. Menggunakan Banyak Lokasi

Sekarang kita telah mempelajari cara mengubah lokasi default, mari kita lihat bagaimana kita dapat menggunakan beberapa lokasi template.

Untuk melakukan ini, mari 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; }

Di kacang kustom kami, kami menyetel awalan kami ke direktori template sekunder yang kami gunakan: templates-2. Kami juga menyetel tanda CheckExistance ke true . Ini adalah kunci untuk memungkinkan resolver beroperasi dalam sebuah rantai.

Dengan ini dikonfigurasi, aplikasi kita dapat menggunakan template dari default utama / sumber / template direktori dan utama / sumber / template-2 .

5. Kesalahan

Saat kami bekerja dengan Thymeleaf, kami mungkin melihat kesalahan ini:

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

Kami melihat pesan ini ketika Timeleaf tidak dapat menemukan templat karena beberapa alasan. Mari kita lihat beberapa kemungkinan alasan untuk ini dan cara memperbaikinya.

5.1. Salah ketik di Kontroler

Kami sering melihat kesalahan ini karena salah ketik. Hal pertama yang harus diperiksa adalah nama file kita dikurangi ekstensi dan template yang kita minta di controller kita sama persis. Jika kami menggunakan subdirektori, kami perlu memastikan bahwa itu benar juga.

Selain itu, masalahnya bisa menjadi masalah dengan sistem operasi tertentu. Windows tidak peka huruf besar / kecil, tetapi sistem operasi lain. Kita harus melihat ini jika semuanya berfungsi dengan baik, katakanlah, di mesin Windows lokal kita, tetapi tidak setelah kita menerapkannya.

5.2. Termasuk Ekstensi File di Controller

Karena file kita biasanya memiliki ekstensi, itu wajar untuk menyertakannya ketika kita mengembalikan jalur template kita di controller. Thymeleaf secara otomatis menambahkan sufiks, jadi kita harus menghindari menyediakannya .

5.3. Tidak Menggunakan Lokasi Default

Kami juga akan melihat kesalahan ini jika kami telah menempatkan templat kami di tempat selain src / main / resources / templates . Jika kita ingin menggunakan lokasi yang berbeda, kita perlu menyetel properti spring.thymeleaf.prefix atau membuat kacang ClassLoaderTemplateResolver kita sendiri untuk menangani banyak lokasi.

6. Kesimpulan

Dalam tutorial singkat ini, kita belajar tentang lokasi template Thymeleaf. Pertama, kami melihat cara mengubah lokasi default dengan menyetel properti. Kemudian kami membangunnya dengan membuat ClassLoaderTemplateResolver kami sendiri untuk menggunakan banyak lokasi.

Kami mengakhiri dengan diskusi tentang kesalahan yang akan kami lihat ketika Thymeleaf tidak dapat menemukan templat kami dan cara mengatasinya.

Seperti biasa, kode contoh dapat ditemukan di GitHub.