Groovy - Şablon Motorları

Groovy'nin şablon motoru, bir adres mektup birleştirme (özellikle reklam olmak üzere birçok adrese posta göndermeyi kolaylaştırmak için bir veritabanından harflere ve zarflara adların ve adreslerin otomatik olarak eklenmesi) gibi çalışır, ancak çok daha geneldir.

Dizelerde Basit Şablon Oluşturma

Aşağıdaki basit örneği ele alırsanız, önce "Groovy" dizesini tutacak bir isim değişkeni tanımlıyoruz. Println deyiminde, bir değerin eklenebileceği bir parametre veya şablon tanımlamak için $ sembolünü kullanıyoruz.

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

Yukarıdaki kod mükemmel bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir. Çıktı, $ adının def ifadesiyle atanan değerle değiştirildiğini açıkça gösterir.

Basit Şablon Motoru

Aşağıda, parametrize metin oluşturmak için şablonunuzda JSP benzeri komut dosyaları ve EL ifadeleri kullanmanıza olanak tanıyan bir SimpleTemplateEngine örneği verilmiştir. Şablon oluşturma motoru, tanımlı yer tutuculara sahip dizede değiştirilebilmeleri için bir parametre listesi ve değerleri bağlamanıza izin verir.

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

Yukarıdaki kod mükemmel bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir.

Şimdi bir XML dosyası için şablon oluşturma özelliğini kullanalım. İlk adım olarak aşağıdaki kodu Student.template adlı bir dosyaya ekleyelim. Aşağıdaki dosyada elemanlar için gerçek değerleri değil, yer tutucular eklediğimizi fark edeceksiniz. Dolayısıyla, $ isim, $ is ve $ konu, çalışma zamanında değiştirilmesi gerekecek yer tutucular olarak yerleştirilir.

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

Şimdi yukarıdaki şablonu gerçek değerlerle değiştirmek için kullanılabilecek işlevselliği eklemek için Groovy betik kodumuzu ekleyelim. Aşağıdaki kodla ilgili olarak aşağıdaki hususlara dikkat edilmelidir.

  • Yer tutucuların gerçek değerlerle eşlenmesi, bir bağlama ve bir SimpleTemplateEngine aracılığıyla yapılır. Bağlama, yer tutucuların anahtar olarak ve değiştirmelerin değerler olduğu bir Haritadır.

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

Yukarıdaki kod mükemmel bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir. Çıktıdan, değerlerin ilgili yer tutucularda başarıyla değiştirildiği görülebilir.

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

StreamingTemplateEngine

StreamingTemplateEngine motoru, Groovy'de bulunan başka bir şablon oluşturma motorudur. Bu, SimpleTemplateEngine ile eşdeğerdir, ancak şablonu büyük şablonlar için daha ölçeklenebilir hale getiren yazılabilir kapaklar kullanarak oluşturur. Özellikle bu şablon motoru 64k'den büyük dizeleri işleyebilir.

Aşağıda, StreamingTemplateEngine'in nasıl kullanıldığına dair bir örnek verilmiştir -

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)

Yukarıdaki kod mükemmel bir şekilde çalıştırılırsa, aşağıdaki çıktı gösterilecektir.

This Tutorial is Groovy The Topic name is Templates

XMLTemplateEngine

XmlTemplateEngine, hem şablon kaynağının hem de beklenen çıktının XML olması amaçlanan şablon oluşturma senaryolarında kullanılır. Şablonlar, şablona rastgele bir ifade eklemek için normal $ {ifade} ve $ değişken gösterimlerini kullanır.

Aşağıda, XMLTemplateEngine'in nasıl kullanıldığına dair bir örnek verilmiştir.

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

Yukarıdaki kod harika bir şekilde yürütülürse, aşağıdaki çıktı gösterilecektir

Joe
    
    
   1
    
    
   Physics