Groovy - silniki szablonów
Silnik szablonów Groovy działa jak korespondencja seryjna (automatyczne dodawanie nazw i adresów z bazy danych do listów i kopert w celu ułatwienia wysyłania poczty, zwłaszcza reklamowej, na wiele adresów), ale jest znacznie bardziej ogólny.
Proste szablony w łańcuchach
Jeśli weźmiesz prosty przykład poniżej, najpierw definiujemy zmienną nazwy, która będzie zawierała ciąg „Groovy”. W instrukcji println używamy symbolu $, aby zdefiniować parametr lub szablon, do którego można wstawić wartość.
def name = "Groovy"
println "This Tutorial is about ${name}"
Jeśli powyższy kod zostanie wykonany w trybie groovy, zostanie wyświetlony następujący wynik. Wynik jasno pokazuje, że $ name zostało zastąpione wartością, która została przypisana przez instrukcję def.
Prosty silnik szablonów
Poniżej znajduje się przykład silnika SimpleTemplateEngine, który umożliwia użycie skryptletów podobnych do JSP i wyrażeń EL w szablonie w celu wygenerowania sparametryzowanego tekstu. Mechanizm tworzenia szablonów umożliwia powiązanie listy parametrów i ich wartości, tak aby można je było zastąpić w ciągu znaków, które mają zdefiniowane symbole zastępcze.
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
Jeśli powyższy kod zostanie wykonany w trybie groovy, zostanie wyświetlony następujący wynik.
Użyjmy teraz funkcji tworzenia szablonów dla pliku XML. Najpierw dodajmy następujący kod do pliku o nazwie Student.template. W poniższym pliku zauważysz, że nie dodaliśmy rzeczywistych wartości elementów, ale symbole zastępcze. Więc $ name, $ is i $ subject są umieszczane jako symbole zastępcze, które będą musiały zostać zastąpione w czasie wykonywania.
<Student>
<name>${name}</name>
<ID>${id}</ID>
<subject>${subject}</subject>
</Student>
Teraz dodajmy nasz kod skryptu Groovy, aby dodać funkcjonalność, której można użyć do zastąpienia powyższego szablonu rzeczywistymi wartościami. Należy zwrócić uwagę na następujące kwestie dotyczące poniższego kodu.
Mapowanie posiadaczy miejsc na rzeczywiste wartości odbywa się za pomocą powiązania i SimpleTemplateEngine. Wiązanie jest mapą z symbolami zastępczymi jako kluczami i zamiennikami jako wartościami.
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
Jeśli powyższy kod zostanie wykonany w trybie groovy, zostanie wyświetlony następujący wynik. Z danych wyjściowych widać, że wartości zostały pomyślnie zastąpione w odpowiednich symbolach zastępczych.
<Student>
<name>Joe</name>
<ID>1</ID>
<subject>Physics</subject>
</Student>
StreamingTemplateEngine
Silnik StreamingTemplateEngine to kolejny silnik tworzenia szablonów dostępny w Groovy. Jest to odpowiednik SimpleTemplateEngine, ale tworzy szablon przy użyciu zapisywalnych zamknięć, dzięki czemu jest bardziej skalowalny w przypadku dużych szablonów. W szczególności ten silnik szablonów może obsługiwać ciągi większe niż 64 kB.
Poniżej znajduje się przykład użycia 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)
Jeśli powyższy kod zostanie wykonany w trybie groovy, zostanie wyświetlony następujący wynik.
This Tutorial is Groovy The Topic name is Templates
XMLTemplateEngine
XmlTemplateEngine jest używany w scenariuszach tworzenia szablonów, w których zarówno źródło szablonu, jak i oczekiwane dane wyjściowe mają być XML. Szablony używają normalnych notacji $ {expression} i $ variable, aby wstawić dowolne wyrażenie do szablonu.
Poniżej znajduje się przykład użycia 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()
Jeśli powyższy kod zostanie wykonany w trybie groovy, zostanie wyświetlony następujący wynik
Joe
1
Physics