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