Groovy的模板引擎的操作方式类似于邮件合并(从数据库自动添加名称和地址到字母和信封,以便于将邮件,特别是广告发送到许多地址),但是它更加通用。
如果你采用下面的简单例子,我们首先定义一个名称变量来保存字符串“Groovy”。在println语句中,我们使用$符号来定义可以插入值的参数或模板。
def name = "Groovy" |
println "This Tutorial is about ${name}" |
如果上面的代码在groovy中执行,将显示以下输出。输出清楚地显示$名称被由def语句分配的值替换。
以下是SimpleTemplateEngine的示例,它允许您在模板中使用类似于JSP的scriptlet和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> |
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 |
<Student> |
<name>Joe</name> |
<ID>1</ID> |
<subject>Physics</subject> |
</Student> |
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) |
This Tutorial is Groovy The Topic name is Templates
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() |
<document> |
<Student> |
<name> |
Joe |
</name> |
<ID> |
1 |
</ID> |
<subject> |
Physics |
</subject> |
</Student> |
</document> |