Groovy的SimpleTemplateEngine使得我们很容易用Groovy作为一个模板语言,也可以用它来代替Velocity, Freemarker。SimpleTemplateEngine采用和JSP类似的语法,即<%= %>中可以嵌入groovy表达式,<% %>中可以嵌入groovy代码,其它部分都是普通文本,在普通文本也可以使用${...},就像在双引号字符串中可以使用${...}一样。但我认为SimpleTemplateEngine有一些限制,来看下面的例子:
输出:
注意每个item之间都有一个[color=red]空白行[/color],这是由于<%for ...%>后面的换行所导致。实际上item1前面也有两个[color=red]空白行[/color],这是由于<%def ...%>和<%for ...%>后面的两个换行符所导致。多余的空白一般不会造成什么问题,比如XML和HTML中的空白一般就不会有什么问题,但是如果我们想要用groovy模板来生成email,这样就会有问题了,我们需要能够更加精细的控制输出的内容。对于上面的例子,如果我们不想要item之间的空白行,我们可以将所有语句放在同一行,但这样会使得groovy模板很难维护。
对于该问题,我的解决方法是在SimpleTemplateEngine的基础上添加一个新的语法,<%- %>,它与<% %>相同,只是它不会输出前面的空白和尾部的空白和换行符。
输出:
这样item之间和item1之前都不会有空白行。
附件是Template引擎的代码。
<%def list = [ "item1", "item2", "item3" ]%>
<% for (item in list) { %>
o $item
<% } %>
输出:
o item1
o item2
o item3
注意每个item之间都有一个[color=red]空白行[/color],这是由于<%for ...%>后面的换行所导致。实际上item1前面也有两个[color=red]空白行[/color],这是由于<%def ...%>和<%for ...%>后面的两个换行符所导致。多余的空白一般不会造成什么问题,比如XML和HTML中的空白一般就不会有什么问题,但是如果我们想要用groovy模板来生成email,这样就会有问题了,我们需要能够更加精细的控制输出的内容。对于上面的例子,如果我们不想要item之间的空白行,我们可以将所有语句放在同一行,但这样会使得groovy模板很难维护。
对于该问题,我的解决方法是在SimpleTemplateEngine的基础上添加一个新的语法,<%- %>,它与<% %>相同,只是它不会输出前面的空白和尾部的空白和换行符。
<%-
def list = [ "item1", "item2", "item3" ]
%>
<%- for (item in list) { %>
o $item
<%- } %>
输出:
o item1
o item2
o item3
这样item之间和item1之前都不会有空白行。
附件是Template引擎的代码。