Учебники

Groovy — шаблоны двигателей

Шаблонный движок Groovy работает как слияние (автоматическое добавление имен и адресов из базы данных в письма и конверты, чтобы упростить отправку почты, особенно рекламы, на многие адреса), но это гораздо более общий характер.

Простые шаблоны в строках

Если вы возьмете простой пример ниже, мы сначала определим переменную имени для хранения строки «Groovy». В выражении println мы используем символ $, чтобы определить параметр или шаблон, в который можно вставить значение.

def name = "Groovy" 
println "This Tutorial is about ${name}"

Если приведенный выше код выполняется в Groovy, будет показан следующий вывод. Вывод ясно показывает, что $ name было заменено значением, которое было назначено оператором def.

Простой шаблонизатор

Ниже приведен пример SimpleTemplateEngine, который позволяет вам использовать JSP-подобные скриптлеты и выражения EL в вашем шаблоне для генерации параметризованного текста. Механизм шаблонов позволяет вам связать список параметров и их значений, чтобы их можно было заменить в строке, которая имеет определенные заполнители.

def text ='This Tutorial focuses on $TutorialName. In this tutorial you will learn 

about $Topic'  

def binding = ["TutorialName":"Groovy", "Topic":"Templates"]  
def engine = new groovy.text.SimpleTemplateEngine() 
def template = engine.createTemplate(text).make(binding) 

println template

Если приведенный выше код выполняется в Groovy, будет показан следующий вывод.

Давайте теперь используем функцию шаблонов для XML-файла. В качестве первого шага добавим следующий код в файл с именем Student.template. В следующем файле вы заметите, что мы добавили не фактические значения для элементов, а заполнители. Таким образом, $ name, $ is и $ subject все помещаются как заполнители, которые нужно будет заменить во время выполнения.

<Student> 
   <name>${name}</name> 
   <ID>${id}</ID> 
   <subject>${subject}</subject> 
</Student>

Теперь давайте добавим наш код скрипта Groovy, чтобы добавить функциональность, которую можно использовать для замены вышеуказанного шаблона фактическими значениями. Следующие вещи следует отметить о следующем коде.

  • Сопоставление заполнителей с фактическими значениями выполняется с помощью привязки и SimpleTemplateEngine. Привязка представляет собой карту с заполнителями в качестве ключей и замен в качестве значений.

Сопоставление заполнителей с фактическими значениями выполняется с помощью привязки и SimpleTemplateEngine. Привязка представляет собой карту с заполнителями в качестве ключей и замен в качестве значений.

import groovy.text.* 
import java.io.* 

def file = new File("D:/Student.template") 
def binding = ['name' : 'Joe', 'id' : 1, 'subject' : 'Physics']
				  
def engine = new SimpleTemplateEngine() 
def template = engine.createTemplate(file) 
def writable = template.make(binding) 

println writable

Если приведенный выше код выполняется в Groovy, будет показан следующий вывод. Из выходных данных видно, что значения успешно заменены в соответствующих заполнителях.

<Student> 
   <name>Joe</name> 
   <ID>1</ID> 
   <subject>Physics</subject> 
</Student>

StreamingTemplateEngine

Механизм StreamingTemplateEngine — это еще один шаблонизатор, доступный в Groovy. Это в некотором роде эквивалентно SimpleTemplateEngine, но создает шаблон с использованием записываемых замыканий, что делает его более масштабируемым для больших шаблонов. В частности, этот шаблонизатор может обрабатывать строки размером более 64 КБ.

Ниже приведен пример использования StreamingTemplateEngine:

def text = '''This Tutorial is <% out.print TutorialName %> The Topic name 

is ${TopicName}''' 
def template = new groovy.text.StreamingTemplateEngine().createTemplate(text)
  
def binding = [TutorialName : "Groovy", TopicName  : "Templates",]
String response = template.make(binding) 
println(response)

Если приведенный выше код выполняется в Groovy, будет показан следующий вывод.

This Tutorial is Groovy The Topic name is Templates

XMLTemplateEngine

XmlTemplateEngine используется в шаблонных сценариях, где источником шаблона и ожидаемым выводом являются XML. Шаблоны используют обычные нотации $ {expression} и $ variable для вставки произвольного выражения в шаблон.

Ниже приведен пример использования XMLTemplateEngine.

Live Demo

def binding = [StudentName: 'Joe', id: 1, subject: 'Physics'] 
def engine = new groovy.text.XmlTemplateEngine() 

def text = '''\
   <document xmlns:gsp='http://groovy.codehaus.org/2005/gsp'>
      <Student>
         <name>${StudentName}</name>
         <ID>${id}</ID>
         <subject>${subject}</subject>
      </Student>
   </document> 
''' 

def template = engine.createTemplate(text).make(binding) 
println template.toString()

Если приведенный выше код выполняется в Groovy, будет показан следующий вывод