📜  Groovy-模板引擎

📅  最后修改于: 2020-11-04 06:52:08             🧑  作者: Mango


Groovy的模板引擎的操作类似于邮件合并(将名称和地址从数据库自动添加到信件和信封,以便于将邮件(尤其是广告)发送到许多地址),但是它的用法要笼统得多。

字符串中的简单模板

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

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

如果上面的代码以常规方式执行,将显示以下输出。输出清楚地表明$ 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

如果上面的代码以常规方式执行,将显示以下输出。

现在让我们对XML文件使用模板功能。首先,我们将以下代码添加到名为Student.template的文件中。在以下文件中,您会注意到我们没有添加元素的实际值,而是添加了占位符。因此,$ name,$ is和$ subject都将作为占位符放置,需要在运行时替换它们。

 
   ${name} 
   ${id} 
   ${subject} 

现在,让我们添加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

如果上面的代码以常规方式执行,将显示以下输出。从输出中可以看出,这些值已在相关占位符中成功替换。

 
   Joe 
   1 
   Physics 

StreamingTemplateEngine

StreamingTemplateEngine引擎是Groovy中可用的另一个模板引擎。这与SimpleTemplateEngine等效,但是使用可写闭包创建模板,从而使其可扩展用于大型模板。具体来说,此模板引擎可以处理大于64k的字符串。

以下是如何使用StreamingTemplateEngine的示例-

def text = '''This Tutorial is  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)

如果上面的代码以常规方式执行,将显示以下输出。

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 = '''\
   
      
         ${StudentName}
         ${id}
         ${subject}
      
    
''' 

def template = engine.createTemplate(text).make(binding) 
println template.toString()

如果上面的代码以常规方式执行,将显示以下输出

Joe
    
    
   1
    
    
   Physics