Шаблонні двигуни в Groovy

1. Огляд

У цьому вступному посібнику ми дослідимо концепцію механізмів шаблонів у Groovy.

У Groovy ми можемо використовувати GString s, щоб легко генерувати динамічний текст. Однак механізми шаблонів забезпечують кращий спосіб обробки динамічного тексту за допомогою статичних шаблонів.

Ці шаблони зручні для визначення статичних шаблонів для різних повідомлень, таких як SMS та електронні листи.

2. Що таке TemplateEngine Groovy ?

Groovy's TemplateEngine - це абстрактний клас, який містить метод createTemplate .

Усі механізми фреймворків шаблонів, доступні в Groovy, розширюють TemplateEngine та реалізують createTemplate. Крім того, кожен механізм повертає об'єкт інтерфейсу шаблону .

Інтерфейс шаблону має метод make , який бере карту для прив'язки змінних. Тому він повинен бути реалізований кожною структурою шаблону.

Давайте обговоримо функціональність та поведінку всіх доступних фреймворків шаблонів у Groovy.

3. SimpleTemplateEngine

SimpleTemplateEngine генерує динамічний текст з використанням Рядок інтерполяції і скріптлетов. Цей механізм дуже корисний для простих повідомлень, таких як SMS та прості текстові електронні листи.

Наприклад:

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

У загальному розумінні StreamingTemplateEngine працює подібно до SimpleTemplateEngine. Однак внутрішньо він використовує закриті для запису записи для створення шаблону.

З тієї ж причини він має переваги при роботі над більшими струнами (> 64K). Отже, це ефективніше, ніж SimpleTemplateEngine.

Давайте напишемо швидкий приклад для створення динамічного вмісту електронної пошти за допомогою статичного шаблону.

По-перше, ми створимо статичний шаблон articleEmail :

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

Тут ми використовуємо скріптлети для динамічного тексту і з для письменника.

Тепер ми створимо вміст електронного листа за допомогою 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

Як випливає з назви, GStringTemplateEngine використовує GString для створення динамічного тексту із статичних шаблонів.

Спочатку напишемо простий шаблон електронної пошти за допомогою GString :

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

Тепер ми будемо використовувати GStringTemplateEngine для створення динамічного вмісту:

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

6. XmlTemplateEngine

XmlTemplateEngine корисно , якщо ми хочемо , щоб створити результати динамічних XML. Він вимагає схеми XML як вхідних даних і дозволяє два спеціальні теги, для ін'єкції сценарію та вводити вираз.

Наприклад, перетворимо вже обговорюваний шаблон електронної пошти на XML:

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

Отже, emailXml буде мати XML, а вміст буде таким:

 Dear Norman Thanks for subscribing our services. Baeldung 

Цікаво відзначити, що вихід XML відступає та покращується рамкою шаблону.

7. MarkupTemplateEngine

Цей фреймворк шаблону є повним пакетом для генерації HTML та інших мов розмітки.

Окрім того, він використовує мову, призначену для домену, для обробки шаблонів і є найбільш оптимізованим серед усіх фреймворків шаблонів, доступних у Groovy.

7.1. HTML

Давайте напишемо короткий приклад для відображення HTML для вже обговореного шаблону електронної пошти :

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()

Тому вміст emailHtml буде таким:

Service Subscription Email 

Dear Norman

Thanks for subscribing our services.

Baeldung

7.2. XML

Аналогічно, ми можемо відтворити XML:

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

Отже, вміст emailXml буде таким:

 Dear NormanThanks for subscribing our services. Baeldung

7.3. TemplateConfiguration

Зауважте, що на відміну від XmlTemplateEngine , висновок шаблону цього фреймворку не відступає і не покращується сам по собі.

Для такої конфігурації ми будемо використовувати клас TemplateConfiguration :

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

7.4. Інтернаціоналізація

Окрім того, властивість мови TemplateConfiguration доступна, щоб забезпечити підтримку інтернаціоналізації.

По-перше, ми створимо файл статичного шаблону email.tpl і скопіюємо в нього вже обговорений рядок emailHtmlTemplate . Це буде розглядатися як шаблон за замовчуванням.

Подібним чином, ми створимо файли шаблонів на основі локалі, такі як email_ja_JP.tpl для японської, email_fr_FR.tpl для французької тощо.

Нарешті, все, що нам потрібно, це встановити локаль в об’єкті TemplateConfiguration :

config.locale = Locale.JAPAN

Отже, буде вибрано відповідний шаблон на основі мови.

8. Висновок

У цій статті ми бачили різні фреймворки шаблонів, доступні в Groovy.

Ми можемо використовувати ці зручні механізми шаблонів для створення динамічного тексту за допомогою статичних шаблонів. Тому вони можуть бути корисними для динамічного генерування різного роду повідомлень або екранних повідомлень та помилок.

Як зазвичай, реалізації коду цього підручника доступні в проекті GitHub.