Шаблонный движок 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.
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, будет показан следующий вывод