1. 概要

この入門チュートリアルでは、Groovyのテンプレートエンジンの概念について説明します。

Groovyでは、 GString sを使用して動的テキストを簡単に生成できます。 ただし、テンプレートエンジンは、静的テンプレートを使用して動的テキストを処理するためのより良い方法を提供します。

これらのテンプレートは、SMSや電子メールなどのさまざまな通知の静的テンプレートを定義するのに便利です。

2. GroovyのTemplateEngineとは何ですか?

GroovyのTemplateEngineは、createTemplateメソッドを含む抽象クラスです。

Groovyで使用可能なすべてのテンプレートフレームワークエンジンは、 TemplateEngine を拡張し、 createTemplateを実装します。さらに、すべてのエンジンはTemplateインターフェイスオブジェクトを返します。

テンプレートインターフェイスには、変数をバインドするためのマップを取得するメソッドmakeがあります。したがって、すべてのテンプレートフレームワークで実装する必要があります。

Groovyで利用可能なすべてのテンプレートフレームワークの機能と動作について説明しましょう。

3. SimpleTemplateEngine

SimpleTemplateEngine は、String補間とスクリプトレットを使用して動的テキストを生成します。 このエンジンは、SMSや単純なテキストメールなどの単純な通知に非常に役立ちます。

例えば:

def smsTemplate = 'Dear <% print user %>, Thanks for reading our Article. ${signature}'
def bindMap = [user: "Norman", signature: "Baeldung"]
def smsText = new SimpleTemplateEngine().createTemplate(smsTemplate).make(bindMap)

assert smsText.toString() == "Dear Norman, Thanks for reading our Article. Baeldung"

4. StreamingTemplateEngine

一般的な意味では、 StreamingTemplateEngineSimpleTemplateEngineと同様に機能します。ただし、内部的にはWritableクロージャーを使用してテンプレートを生成します。

同じ理由で、より大きな文字列(> 64K)で作業する場合にも利点があります。 したがって、SimpleTemplateEngine。よりも効率的です。

静的テンプレートを使用して動的な電子メールコンテンツを生成する簡単な例を書いてみましょう。

まず、静的なarticleEmailテンプレートを作成します。

Dear <% out << (user) %>,
Please read the requested article below.
<% out << (articleText) %>
From,
<% out << (signature) %>

ここでは、 <% %> 動的テキストのスクリプトレットとアウト作家のために。

次に、StreamingTemplateEngineを使用して電子メールのコンテンツを生成します。

def articleEmailTemplate = new File('src/main/resources/articleEmail.template')
def bindMap = [user: "Norman", signature: "Baeldung"]

bindMap.articleText = """1. Overview
This is a tutorial article on Template Engines...""" //can be a string larger than 64k

def articleEmailText = new StreamingTemplateEngine().createTemplate(articleEmailTemplate).make(bindMap)

assert articleEmailText.toString() == """Dear Norman,
Please read the requested article below.
1. Overview
This is a tutorial article on Template Engines...
From,
Baeldung"""

5. GStringTemplateEngine

名前が示すように、 GStringTemplateEngine は、 GString を使用して、静的テンプレートから動的テキストを生成します。

まず、GStringを使用して簡単なemailテンプレートを作成しましょう。

Dear $user,
Thanks for subscribing our services.
${signature}

次に、GStringTemplateEngineを使用して動的コンテンツを作成します。

def emailTemplate = new File('src/main/resources/email.template')
def emailText = new GStringTemplateEngine().createTemplate(emailTemplate).make(bindMap)

6. XmlTemplateEngine

XmlTemplateEngine は、動的XML出力を作成する場合に役立ちます。 入力としてXMLスキーマが必要であり、2つの特別なタグを許可します。 スクリプトを挿入し、 式を挿入します。

たとえば、すでに説明したemailテンプレートをXMLに変換してみましょう。

def emailXmlTemplate = '''
<xs xmlns:gsp='groovy-server-pages'>
    <gsp:scriptlet>def emailContent = "Thanks for subscribing our services."</gsp:scriptlet>
    <email>
        <greet>Dear ${user}</greet>
        <content><gsp:expression>emailContent</gsp:expression></content>
        <signature>${signature}</signature>
    </email>
</xs>'''

def emailXml = new XmlTemplateEngine().createTemplate(emailXmlTemplate).make(bindMap)

したがって、 emailXml にはXMLがレンダリングされ、内容は次のようになります。

<xs>
  <email>
    <greet>
      Dear Norman
    </greet>
    <content>
      Thanks for subscribing our services.
    </content>
    <signature>
      Baeldung
    </signature>
  </email>
</xs>

XML出力は、テンプレートフレームワークによってインデントされ、美化されていることに注意してください。

7. MarkupTemplateEngine

このテンプレートフレームワークは、HTMLおよびその他のマークアップ言語を生成するための完全なパッケージです。

さらに、ドメイン固有言語を使用してテンプレートを処理し、Groovyで利用可能なすべてのテンプレートフレームワークの中で最も最適化されています。

7.1. HTML

すでに説明したemailテンプレートのHTMLをレンダリングする簡単な例を書いてみましょう。

def emailHtmlTemplate = """
html {
    head {
        title('Service Subscription Email')
    }
    body {
        p('Dear Norman')
        p('Thanks for subscribing our services.')
        p('Baeldung')
    }
}"""
def emailHtml = new MarkupTemplateEngine().createTemplate(emailHtmlTemplate).make()

したがって、emailHtmlの内容は次のようになります。

<html><head><title>Service Subscription Email</title></head>
<body><p>Dear Norman</p><p>Thanks for subscribing our services.</p><p>Baeldung</p></body></html>

7.2. XML

同様に、XMLをレンダリングできます。

def emailXmlTemplate = """
xmlDeclaration()  
    xs{
        email {
            greet('Dear Norman')
            content('Thanks for subscribing our services.')
            signature('Baeldung')
        }  
    }"""
def emailXml = new MarkupTemplateEngine().createTemplate(emailXmlTemplate).make()

したがって、emailXmlの内容は次のようになります。

<?xml version='1.0'?>
<xs><email><greet>Dear Norman</greet><content>Thanks for subscribing our services.</content>
<signature>Baeldung</signature></email></xs>

7.3. TemplateConfiguration

XmlTemplateEngine とは異なり、このフレームワークのテンプレート出力は、それ自体ではインデントおよび美化されないことに注意してください。

このような構成には、TemplateConfigurationクラスを使用します。

TemplateConfiguration config = new TemplateConfiguration()
config.autoIndent = true
config.autoEscape = true
config.autoNewLine = true
                               
def templateEngine = new MarkupTemplateEngine(config)

7.4. 国際化

さらに、TemplateConfigurationlocaleプロパティを使用して、国際化のサポートを有効にすることができます。

まず、静的テンプレートファイル email.tpl を作成し、すでに説明したemailHtmlTemplate文字列をそのファイルにコピーします。 これはデフォルトのテンプレートとして扱われます。

同様に、日本語の場合は email_ja_JP.tpl 、フランス語の場合はemail_fr_FR.tplなどのロケールベースのテンプレートファイルを作成します。

最後に、必要なのはTemplateConfigurationオブジェクトにlocaleを設定することだけです。

config.locale = Locale.JAPAN

したがって、対応するロケールベースのテンプレートが選択されます。

8. 結論

この記事では、Groovyで利用できるさまざまなテンプレートフレームワークを見てきました。

これらの便利なテンプレートエンジンを活用して、静的テンプレートを使用して動的テキストを生成できます。 したがって、さまざまな種類の通知や画面上のメッセージやエラーを動的に生成するのに役立ちます。

いつものように、このチュートリアルのコード実装はGitHubプロジェクトで利用できます。