Groovy - 模板引擎

Groovy 的模板引擎的操作类似于邮件合并(将数据库中的姓名和地址自动添加到信件和信封中,以便于向多个地址发送邮件,尤其是广告),但它更通用。


字符串中的简单模板

如果您采用下面的简单示例,我们首先定义一个名称变量来保存字符串"Groovy"。 在 println 语句中,我们使用 $ 符号来定义可以插入值的参数或模板。

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

如果上面的代码在 groovy 中执行,将显示以下输出。 输出清楚地表明 $name 被 def 语句分配的值替换。


简单模板引擎

以下是 SimpleTemplateEngine 的示例,它允许您在模板中使用类似 JSP 的脚本和 EL 表达式来生成参数化文本。 模板引擎允许您绑定参数列表及其值,以便可以在具有已定义占位符的字符串中替换它们。

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 完成的。 绑定是一个 Map,占位符作为键,替换作为值。

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 中可用的另一个模板引擎。 这有点等同于 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