Contents

Thymeleaf คืออะไรและคุณสามารถใช้มันในแอพพลิเคชั่น Spring Boot ของคุณได้อย่างไร?

Thymeleaf เป็นเอ็นจิ้นเทมเพลต Java พัฒนาเทมเพลตสำหรับทั้งแอปพลิเคชันบนเว็บและแอปพลิเคชันสแตนด์อโลน กลไกเทมเพลตนี้ใช้แนวคิดเทมเพลตแบบธรรมชาติเพื่อแทรกตรรกะลงในเลย์เอาต์ของคุณ โดยไม่กระทบต่อการออกแบบของคุณ ด้วย Thymeleaf คุณจะสามารถควบคุมวิธีที่แอปพลิเคชันจะประมวลผลเทมเพลตที่คุณสร้างขึ้น

Thymeleaf รองรับการประมวลผลเทมเพลตหลายรูปแบบ รวมถึง HTML, XML, ข้อความ, JavaScript, CSS และ RAW ในบรรดาสิ่งเหล่านี้ HTML เป็นรูปแบบเทมเพลตที่ใช้กันมากที่สุดภายในกรอบงาน Thymeleaf

กำลังเริ่มต้น Thymeleaf ในแอปพลิเคชันของคุณ

อีกทางหนึ่ง อาจรวม Thymeleaf เข้ากับโปรเจ็กต์ Spring Boot ของตนโดยเลือกให้รวมไว้ระหว่างการสร้างโค้ดสำเร็จรูปผ่านเครื่องมือ Initializr ของ Spring หรือรวมไว้ในไฟล์ข้อกำหนดเฉพาะของบิลด์ภายใต้หัวข้อการขึ้นต่อกันในภายหลัง

ในกรณีที่คุณเลือกตัวเลือกโปรเจ็กต์ Gradle ไฟล์การกำหนดค่าที่ระบุการขึ้นต่อกันของโปรเจ็กต์จะเรียกว่าไฟล์ “build.gradle” ในทางกลับกัน หากคุณเลือก Maven เป็นโซลูชันการจัดการการขึ้นต่อกัน ไฟล์การกำหนดค่าที่เกี่ยวข้องจะมีชื่อว่า"pom.xml"

ไฟล์ XML ที่ระบุการขึ้นต่อกันสำหรับโปรเจ็กต์ของคุณ ซึ่งเรียกว่า “pom.xml” ควรรวมส่วนเฉพาะที่สรุปการขึ้นต่อกันเหล่านั้น

 <dependency>

     <groupId>org.springframework.boot</groupId>

     <artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

อันที่จริง มีความจำเป็นที่ไฟล์ build.gradle ของคุณจะต้องรวมส่วนการขึ้นต่อกันเฉพาะดังต่อไปนี้:

 dependencies {

     implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

} 

บทความข้างต้นมีแอปพลิเคชันภาพประกอบที่สามารถเข้าถึงได้ผ่านพื้นที่เก็บข้อมูล GitHub เฉพาะ ซึ่งให้สิทธิ์ผู้ใช้ในการใช้งานโดยไม่เสียค่าใช้จ่ายภายใต้เงื่อนไขของใบอนุญาต MIT ที่อนุญาต

การรวม Thymeleaf เข้ากับแอปพลิเคชัน Spring ทำให้ได้เปรียบในการใช้ไลบรารีพื้นฐาน ทำให้สามารถใช้งาน Spring Standard Dialect สำหรับ Thymeleaf ได้ ภาษาถิ่นนี้นำเสนอคุณลักษณะที่โดดเด่นและสไตล์การแสดงออก ซึ่งอำนวยความสะดวกในการรวมความสามารถต่างๆ ภายในโครงสร้างการออกแบบ

การใช้ Thymeleaf ใน Spring Boot

ในการใช้ Thymeleaf ภายในแอปพลิเคชัน Spring จำเป็นต้องเริ่มต้นด้วยการสร้างเอกสารเทมเพลต ในตัวอย่างนี้ รูปแบบที่เลือกสำหรับเทมเพลตคือไฟล์ HTML ขอแนะนำให้สร้างเทมเพลต Thymeleaf ทั้งหมดภายในไดเร็กทอรี"เทมเพลต"ที่อยู่ในไฟล์ทรัพยากรของ Spring Boot

ไฟล์ home.html

 <!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

   <title>Generic Website</title>

</head>

<body></body>

</html>

เทมเพลต Thymeleaf ที่ให้มาจะแสดงมาร์กอัป HTML ทั่วไป รวมถึงคำนำหน้าเนมสเปซที่ไม่เกี่ยวข้อง xmlns:th ซึ่งทำหน้าที่เป็นพื้นฐานสำหรับการใช้แอตทริบิวต์ใดๆ ที่ทำหมายเหตุประกอบด้วย th: ภายในเอกสาร HTML ปัจจุบัน คุณลักษณะและองค์ประกอบอื่นๆ ทั้งหมดในเทมเพลต Thymeleaf เป็นไปตามไวยากรณ์และแบบแผน HTML มาตรฐาน

การสร้างส่วนหัว

ส่วนหัวมีบทบาทสำคัญในการถ่ายทอดวัตถุประสงค์ของเว็บไซต์หรือแอปพลิเคชันผ่านโลโก้ ขณะเดียวกันก็อำนวยความสะดวกในการนำทางที่ราบรื่นสำหรับผู้ใช้ ส่วนประกอบที่สำคัญของส่วนหัวพื้นฐานประกอบด้วยโลโก้และลิงก์การนำทางหลายลิงก์ที่ช่วยให้เข้าถึงส่วนต่างๆ ของเว็บไซต์หรือแอปได้อย่างง่ายดาย

 <!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

 <body>

    <div id="nav">

       <h1>LOGO</h1>

     <ul>

     <li> <a id="current">Home </a> </li>

     <li> <a>About</a> </li>

     <li> <a>Services</a> </li>

     </ul>

   </div>

 </body>

</html>

Thymeleaf เสนอวิธีที่สะดวกในการรวมส่วนหัวที่ระบุไว้บนหน้าเว็บใดๆ ภายในเว็บแอปพลิเคชันของคุณ โดยใช้แอตทริบิวต์ th:insert คุณลักษณะนี้เข้ากันได้กับทั้ง th:insert และ th:replace ซึ่ง Thymeleaf ยอมรับเป็น"ค่านิพจน์แฟรกเมนต์"นิพจน์ส่วนย่อยเหล่านี้ให้ความสามารถในการแทรกส่วนของเนื้อหาที่มีโครงสร้างที่จุดต่างๆ ทั่วทั้งองค์ประกอบของเค้าโครงของคุณ

 <div th:insert="~{header :: #nav}"></div> 

การรวมมาร์กอัปดังกล่าวไว้ในแท็กเปิด ในไฟล์ home.html จะทำให้ส่วนหัวปรากฏบนหน้าแรก นิพจน์ส่วนย่อยประกอบด้วยองค์ประกอบหลายรายการ โดยสองรายการเป็นวิชาเลือก ในขณะที่อีกสองรายการที่เหลือเป็นภาคบังคับ

⭐ เครื่องหมายตัวหนอน (~) ซึ่งเป็นทางเลือก

ชุดวงเล็บปีกกาที่เป็นทางเลือก ซึ่งแสดงด้วย {}

เทมเพลต HTML ที่กล่าวมาข้างต้นซึ่งรวมมาร์กอัปที่ต้องการไว้นั้น ถูกกำหนดโดยป้ายกำกับ “header.html”

เพื่อให้สามารถรันโค้ด JavaScript ที่ให้มาได้สำเร็จ จำเป็นต้องตรวจสอบให้แน่ใจว่าไฟล์ HTML มีองค์ประกอบ ที่มีแอตทริบิวต์ ID ตั้งค่าเป็น"nav"ซึ่งสามารถทำได้โดยการเพิ่มมาร์กอัปที่เหมาะสมภายในแท็ก ของเอกสาร HTML และกำหนดค่า ID ที่ต้องการตามนั้น

แท้จริงแล้ว การใช้มาร์กอัปดังกล่าวจะให้ผลลัพธ์ที่เหมือนกันกับผลลัพธ์ที่ทำได้ผ่านแนวทางทางเลือกที่มีรายละเอียดก่อนหน้านี้

 <div th:insert="header :: #nav"></div>

การเติมเนื้อหาเทมเพลตของคุณ

Thymeleaf รองรับรูปแบบการแสดงออกที่หลากหลายภายในโครงสร้างเทมเพลต ครอบคลุมห้าหมวดหมู่ที่แตกต่างกันดังนี้:

⭐ นิพจน์แฟรกเมนต์ (~{€¦})

⭐การแสดงออกของข้อความ (#{€¦})

⭐ลิงก์นิพจน์ URL (@{€¦})

⭐ นิพจน์ตัวแปร (${€¦})

⭐การเลือกนิพจน์ตัวแปร (*{€¦})

การใช้นิพจน์ข้อความช่วยให้สามารถรวมองค์ประกอบข้อความที่ไม่เกี่ยวข้องภายในเค้าโครงได้อย่างง่ายดาย ด้วยการใช้วิธีการนี้ เราสามารถทดแทนหรือนำเนื้อหาที่มีอยู่ในการออกแบบกลับมาใช้ใหม่ได้อย่างราบรื่น มีความจำเป็นเมื่อใช้นิพจน์ข้อความที่ส่วนประกอบข้อความที่เกี่ยวข้องจะถูกจัดเก็บไว้ในไฟล์ที่อยู่ใต้ไดเร็กทอรี resourcesfolder

ตัวอย่างที่ให้มาใช้ไฟล์ทรัพยากรเฉพาะชื่อ"messages.properties"ซึ่งรวมถึงข้อความที่ตัดตอนมาที่กำหนด:

 placeholder.text=Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem porro non quae obcaecati illo laboriosam. 

โปรดพิจารณาว่าข้อความที่ตัดตอนมามีตัวระบุที่เรียกว่า"placeholder.text"การกำหนดนี้ถูกกำหนดเนื่องจากองค์ประกอบการส่งข้อความแต่ละรายการอาจประกอบด้วยการสื่อสารต่างๆ ดังนั้นจึงจำเป็นต้องรวมจุดอ้างอิงเพื่อรวมข้อความเฉพาะภายในการกำหนดค่า

 <p th:text="#{placeholder.text}"></p>

การรวมข้อมูลโค้ดที่ให้ไว้ในเนื้อหาของเอกสาร HTML ช่วยให้มั่นใจได้ว่าเนื้อหาตัวยึดตำแหน่งจะปรากฏเป็นย่อหน้าที่สอดคล้องกันภายในอินเทอร์เฟซผู้ใช้ ตรงกันข้ามกับนิพจน์ส่วนย่อย ส่วนประกอบทั้งหมดของนิพจน์ข้อความถือเป็นข้อบังคับและขาดไม่ได้ การแสดงออกของข้อความจำเป็นต้องรวมแต่ละองค์ประกอบที่ระบุโดยไม่มีการละเว้นหรือการทดแทนใดๆ

⭐เครื่องหมายตัวเลข (#)

⭐เหล็กปีกกาคู่หนึ่ง ({})

เนื้อหาข้อความที่อยู่ในองค์ประกอบที่กำหนดว่าเป็น"placeholder"คือข้อความที่เราต้องการสื่อ ซึ่งสามารถเข้าถึงได้ผ่านคุณลักษณะหรือคุณสมบัติที่เกี่ยวข้อง เช่น"placeholder.text"

จัดแต่งทรงผมเทมเพลตของคุณ

องค์ประกอบที่สำคัญอื่นๆ ภายในไดเร็กทอรี “ทรัพยากร” เกี่ยวข้องกับไฟล์คงที่ ซึ่งทำหน้าที่เป็นพื้นที่เก็บข้อมูลสำหรับสไตล์ชีต CSS และองค์ประกอบภาพที่สำคัญต่อการทำงานของเว็บแอปพลิเคชันของคุณ ในการสร้างการเชื่อมต่อระหว่างไฟล์ CSS ที่โฮสต์ภายนอกและเทมเพลต Thymeleaf HTML ต้องใช้นิพจน์ URL ของลิงก์ นิพจน์อเนกประสงค์นี้มีความสามารถในการจัดการทั้ง URL เชิงสัมพันธ์และ URL ที่สมบูรณ์ ให้ความยืดหยุ่นและความสะดวกเมื่อรวมส่วนประกอบการออกแบบที่จำเป็นเข้ากับรากฐานของโครงการของคุณ

 <link rel="stylesheet" th:href="@{/css/style.css}" /> 

การรวมโค้ดที่ให้ไว้ภายในองค์ประกอบ ของเอกสาร HTML ของคุณทำให้สามารถจัดรูปแบบโดยใช้ไฟล์ style.css แยกต่างหาก ซึ่งสามารถพบได้ภายในไดเร็กทอรี static/css ของไฟล์ทรัพยากรของแอปพลิเคชันตัวอย่าง จำเป็นอย่างยิ่งที่จะต้องแน่ใจว่าแอตทริบิวต์ th:href ได้รับการกำหนดด้วยนิพจน์ URL ที่เหมาะสมเมื่อลิงก์ไปยังไฟล์ CSS นี้

Thymeleaf นำเสนอคุณสมบัติที่หลากหลายที่ช่วยให้นักพัฒนาสามารถปรับแต่งการออกแบบเพจของตนได้ หนึ่งในคุณลักษณะเหล่านี้คือแอตทริบิวต์ th:style ซึ่งช่วยให้สามารถรวมองค์ประกอบภาพภายในเค้าโครงได้

 <div id="showcase" th:style="'background: url(/images/background.jpg) no-repeat center center fixed;'"> 

มาร์กอัปใช้การระบุแหล่งที่มา th:style เพื่อตกแต่งภาพพื้นหลังให้กับส่วนใดส่วนหนึ่งของเค้าโครง Thymeleaf มีคุณสมบัติมากกว่าหนึ่งร้อยรายการ ซึ่งสามารถนำไปใช้เพื่อมอบคุณลักษณะด้านโวหารและการใช้งานภายในเค้าโครง

นิพจน์ตัวแปร

นิพจน์ตัวแปรเป็นส่วนที่แพร่หลายและซับซ้อนของไวยากรณ์ของ Thymeleaf ทำให้สามารถดึงข้อมูลจากบริบทของแอปพลิเคชันหรือวัตถุภายในเพื่อรวมเข้ากับเทมเพลตได้ มีนิพจน์ตัวแปรสองแบบให้เลือกตามลักษณะของข้อมูลที่มีไว้สำหรับแสดงในมุมมอง

การใช้เครื่องหมายดอลลาร์เป็นส่วนหนึ่งของนิพจน์ตัวแปรทำให้สามารถดึงข้อมูลที่เกี่ยวข้องกับงานเฉพาะที่เกิดขึ้นภายในบริบทของแอปพลิเคชันได้ ภาพประกอบที่เกี่ยวข้องเกี่ยวข้องกับการรับรายละเอียดเกี่ยวกับผู้ใช้จากโมดอลเฉพาะ เมื่อดำเนินการโครงการตัวอย่างที่ให้มาและนำทางไปยัง http://localhost:8080/ ในเว็บเบราว์เซอร์ บุคคลจะพบอินเทอร์เฟซแบบโมดอล

/th/images/thymeleaf-modal-1.jpg

เมื่อปิดหน้าต่างโมดอลหรือส่งชื่อผ่านหน้าต่างนั้น แอปพลิเคชันจะเปลี่ยนเส้นทางไปยังหน้าแรก เมื่อมาถึงหน้าแรกดังกล่าว ผู้ใช้จะพบเว็บไซต์มาตรฐานที่มีคำทักทาย"ยินดีต้อนรับ"และต่อมาจะแสดงข้อความที่ป้อนจากโมดอลภายในสตริง

/th/images/thymeleaf-template-output-1.jpg

แอปพลิเคชันดังกล่าวใช้การใช้นิพจน์ตัวแปรเพื่อให้บรรลุวัตถุประสงค์ ในเอกสาร modal.html โครงสร้างพื้นฐานจะถูกนำเสนอผ่านการรวมมาร์กอัปที่ตามมา:

 <form id="form" th:action="@{/home}" method="post">

   <input type="text" name="userName"class="form-control" placeholder="Your Name" />

   <button type="submit" class="btn">Submit</button>

</form>

เมื่อผู้ใช้ส่งแบบฟอร์ม แอ็ตทริบิวต์ th:action จะถูกทริกเกอร์ ซึ่งค่าจะสอดคล้องกับ POST URL ที่พบในคลาส WebController

 @PostMapping("/home")

   public String processName(String userName, Model model) {

       model.addAttribute("userName", userName);

       return "home";

   } 

เมธอด processName() ใช้เป็นอินพุตสตริงที่ผู้ใช้ให้มาผ่านทางโมดอล และจัดเก็บไว้ในตัวแปรชื่อ ชื่อผู้ใช้ ต่อจากนั้น เมื่อใช้นิพจน์ตัวแปร คอนโทรลเลอร์จะใส่ตัวแปร ชื่อผู้ใช้ ลงในโครงร่าง

 <h1>Welcome <span th:text="${userName}"></span>!</h1> 

การใช้นิพจน์ตัวแปรการเลือกที่ปรับปรุงด้วยเครื่องหมายดอกจันจะมีคุณค่ามากขึ้นเรื่อยๆ เมื่อความซับซ้อนภายในระบบซอฟต์แวร์เพิ่มมากขึ้น ภาพประกอบที่ใช้งานได้จริงเกี่ยวข้องกับกลไกการรับรองความถูกต้องซึ่งการรวบรวมชื่อผู้ใช้จากอ็อบเจ็กต์ผู้ใช้และการรวมเข้ากับการออกแบบอินเทอร์เฟซเป็นตัวอย่างการทำงานนี้อย่างมีประสิทธิภาพ

เทมเพลตสำรองและตัวเลือกสไตล์

แม้ว่า Thymeleaf จะมีชื่อเสียงในฐานะโซลูชันการสร้างเทมเพลตที่ต้องการสำหรับโปรเจ็กต์ Spring Boot แต่การพิจารณาตัวเลือกอื่นที่มีฟังก์ชันการทำงานที่เทียบเคียงได้ก็เป็นสิ่งสำคัญ หนึ่งในทางเลือกเหล่านี้คือ JavaServer Pages (JSP) ซึ่งจัดเตรียมการสร้างโค้ด Java ฝั่งเซิร์ฟเวอร์ เทมเพลต Groovy ซึ่งอนุญาตให้สร้างเนื้อหาแบบไดนามิกโดยใช้ภาษาสคริปต์ Groovy เทมเพลต FreeMarker ซึ่งเป็นเอ็นจิ้นเทมเพลตโอเพ่นซอร์สที่รองรับภาษาการเขียนโปรแกรมหลายภาษา และเทมเพลต Mustache ซึ่งขึ้นชื่อเรื่องความเรียบง่ายและง่ายต่อการบูรณาการ นอกจากนี้ นักพัฒนายังมีความยืดหยุ่นในการใช้สไตล์ CSS ที่กำหนดเอง หรือใช้เฟรมเวิร์ก CSS ที่มีอยู่แล้วเพื่อออกแบบเค้าโครงหน้า