Công cụ mẫu trong Groovy

1. Khái quát chung

Trong hướng dẫn giới thiệu này, chúng ta sẽ khám phá khái niệm về công cụ mẫu trong Groovy.

Trong Groovy, chúng ta có thể sử dụng GString s để tạo văn bản động một cách dễ dàng. Tuy nhiên, các công cụ mẫu cung cấp một cách tốt hơn để xử lý văn bản động bằng cách sử dụng các mẫu tĩnh.

Các mẫu này thuận tiện trong việc xác định các mẫu tĩnh cho các thông báo khác nhau như SMS và email.

2. TemplateEngine của Groovy là gì?

Groovy's TemplateEngine là một lớp trừu tượng có chứa phương thức createTemplate .

Tất cả các công cụ khuôn khổ mẫu có sẵn trong Groovy mở rộng TemplateEngine và triển khai createTemplate. Ngoài ra, mọi công cụ đều trả về đối tượng giao diện Mẫu .

Các mẫu giao diện có một phương pháp làm , trong đó có một bản đồ cho ràng buộc các biến. Do đó, nó phải được thực hiện bởi mọi khuôn khổ mẫu.

Hãy thảo luận về chức năng và hành vi của tất cả các khuôn khổ mẫu có sẵn trong Groovy.

3. SimpleTemplateEngine

Các SimpleTemplateEngine tạo ra văn bản động sử dụng chuỗi suy và scriptlets. Công cụ này khá hữu ích cho các thông báo đơn giản như SMS và email văn bản đơn giản.

Ví dụ:

def smsTemplate = 'Dear , Thanks for reading our Article. ${signature}' def bindMap = [user: "Norman", signature: "Baeldung"] def smsText = new SimpleTemplateEngine().createTemplate(smsTemplate).make(bindMap) assert smsText.toString() == "Dear Norman, Thanks for reading our Article. Baeldung"

4. StreamingTemplateEngine

Theo nghĩa chung, StreamingTemplateEngine hoạt động tương tự như SimpleTemplateEngine. Tuy nhiên, bên trong nó sử dụng các đóng ghi có thể tạo ra một khuôn mẫu.

Vì lý do tương tự, nó mang lại lợi ích khi làm việc trên các Chuỗi lớn hơn (> 64K). Do đó, nó hiệu quả hơn SimpleTemplateEngine.

Hãy viết một ví dụ nhanh để tạo nội dung email động bằng cách sử dụng mẫu tĩnh.

Đầu tiên, chúng tôi sẽ tạo một mẫu articleEmail tĩnh :

Dear <% out <, Please read the requested article below. <% out < From, <% out <

Đây, chúng tôi đang sử dụng scriptlets cho văn bản động và ra cho nhà văn.

Bây giờ, chúng tôi sẽ tạo nội dung của email bằng StreamingTemplateEngine :

def articleEmailTemplate = new File('src/main/resources/articleEmail.template') def bindMap = [user: "Norman", signature: "Baeldung"] bindMap.articleText = """1. Overview This is a tutorial article on Template Engines...""" //can be a string larger than 64k def articleEmailText = new StreamingTemplateEngine().createTemplate(articleEmailTemplate).make(bindMap) assert articleEmailText.toString() == """Dear Norman, Please read the requested article below. 1. Overview This is a tutorial article on Template Engines... From, Baeldung"""

5. GStringTemplateEngine

Như tên cho thấy, GStringTemplateEngine sử dụng GString để tạo văn bản động từ các mẫu tĩnh.

Đầu tiên, hãy viết một mẫu email đơn giản bằng GString :

Dear $user, Thanks for subscribing our services. ${signature}

Bây giờ, chúng tôi sẽ sử dụng GStringTemplateEngine để tạo nội dung động:

def emailTemplate = new File('src/main/resources/email.template') def emailText = new GStringTemplateEngine().createTemplate(emailTemplate).make(bindMap) 

6. XmlTemplateEngine

Các XmlTemplateEngine rất hữu ích khi chúng ta muốn tạo ra XML động. Nó yêu cầu lược đồ XML làm đầu vào và cho phép hai thẻ đặc biệt, để chèn tập lệnh và để tiêm một biểu thức.

Ví dụ: hãy chuyển đổi mẫu email đã được thảo luận sang XML:

def emailXmlTemplate = ''' def emailContent = "Thanks for subscribing our services." Dear ${user} emailContent ${signature} ''' def emailXml = new XmlTemplateEngine().createTemplate(emailXmlTemplate).make(bindMap)

Do đó, emailXml sẽ có XML được hiển thị và nội dung sẽ là:

 Dear Norman Thanks for subscribing our services. Baeldung 

Thật thú vị khi lưu ý rằng đầu ra XML được làm đẹp và tự làm đẹp bởi khuôn khổ mẫu.

7. MarkupTemplateEngine

Khung mẫu này là một gói hoàn chỉnh để tạo HTML và các ngôn ngữ đánh dấu khác.

Ngoài ra, nó sử dụng Ngôn ngữ dành riêng cho Miền để xử lý các mẫu và được tối ưu hóa nhất trong số tất cả các khuôn khổ mẫu có sẵn trong Groovy.

7.1. HTML

Hãy viết một ví dụ nhanh để hiển thị HTML cho mẫu email đã được thảo luận :

def emailHtmlTemplate = """ html { head { title('Service Subscription Email') } body { p('Dear Norman') p('Thanks for subscribing our services.') p('Baeldung') } }""" def emailHtml = new MarkupTemplateEngine().createTemplate(emailHtmlTemplate).make()

Do đó, nội dung của emailHtml sẽ là:

Service Subscription Email 

Dear Norman

Thanks for subscribing our services.

Baeldung

7.2. XML

Tương tự như vậy, chúng ta có thể kết xuất XML:

def emailXmlTemplate = """ xmlDeclaration() xs{ email { greet('Dear Norman') content('Thanks for subscribing our services.') signature('Baeldung') } }""" def emailXml = new MarkupTemplateEngine().createTemplate(emailXmlTemplate).make()

Do đó, nội dung của emailXml sẽ là:

 Dear NormanThanks for subscribing our services. Baeldung

7.3. TemplateConfiguration

Lưu ý rằng không giống như XmlTemplateEngine , đầu ra mẫu của khuôn khổ này không tự thụt vào và làm đẹp.

Đối với cấu hình như vậy, chúng tôi sẽ sử dụng lớp TemplateConfiguration :

TemplateConfiguration config = new TemplateConfiguration() config.autoIndent = true config.autoEscape = true config.autoNewLine = true def templateEngine = new MarkupTemplateEngine(config)

7.4. Quốc tế hóa

Ngoài ra, thuộc tính ngôn ngữ của TemplateConfiguration có sẵn để cho phép hỗ trợ quốc tế hóa.

Đầu tiên, chúng tôi sẽ tạo một tệp mẫu tĩnh email.tpl và sao chép chuỗi emailHtmlTemplate đã được thảo luận vào đó. Đây sẽ được coi là mẫu mặc định.

Tương tự như vậy, chúng tôi sẽ tạo các tệp mẫu dựa trên ngôn ngữ như email_ja_JP.tpl cho tiếng Nhật, email_fr_FR.tpl cho tiếng Pháp, v.v.

Finally, all we need is to set the locale in the TemplateConfiguration object:

config.locale = Locale.JAPAN

Hence, the corresponding locale-based template will be picked.

8. Conclusion

In this article, we've seen various template frameworks available in Groovy.

We can leverage these handy template engines to generate dynamic text using static templates. Therefore, they can be helpful in the dynamic generation of various kinds of notifications or on-screen messages and errors.

As usual, the code implementations of this tutorial are available on the GitHub project.