Groovy-テンプレートエンジン

Groovyのテンプレートエンジンは、差し込み印刷(多くのアドレスへのメール、特に広告の送信を容易にするために、データベースから文字や封筒に名前とアドレスを自動的に追加する)のように動作しますが、はるかに一般的です。

文字列での単純なテンプレート

以下の簡単な例を見ると、最初に文字列「Groovy」を保持する名前変数を定義しています。printlnステートメントでは、$記号を使用して、値を挿入できるパラメーターまたはテンプレートを定義しています。

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

上記のコードをgroovyで実行すると、次の出力が表示されます。出力は、$ nameがdefステートメントによって割り当てられた値に置き換えられたことを明確に示しています。

シンプルなテンプレートエンジン

以下は、パラメータ化されたテキストを生成するために、テンプレートでJSPのようなスクリプトレットとEL式を使用できるようにするSimpleTemplateEngineの例です。テンプレートエンジンを使用すると、パラメーターとその値のリストをバインドして、プレースホルダーが定義されている文字列でそれらを置き換えることができます。

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を介して行われます。バインディングは、プレースホルダーをキーとして、置換を値として持つマップです。

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で使用できるもう1つのテンプレートエンジンです。これはSimpleTemplateEngineと一種の同等ですが、書き込み可能なクロージャを使用してテンプレートを作成し、大きなテンプレートに対してよりスケーラブルにします。具体的には、このテンプレートエンジンは64kを超える文字列を処理できます。

以下は、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で実行すると、次の出力が表示されます。

Joe
    
    
   1
    
    
   Physics