使用groovy GStringTemplateEngine()循环模板

时间:2018-03-23 07:30:27

标签: groovy template-engine

我的要求是创建模板引擎以支持其中的循环

最终模板应如下所示:

#cat output.template 
env:
  - name : param1 
    value : 1
  - name : param2 
    value : 2

我有伪代码来解释我的要求

def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()

def mapping = [
    [ name : "param1",
      value : "1"],
    [ name : "param2",
      value : "2" ]
] // This mapping can consists of a multiple key value pairs.

def Template = engine.createTemplate(f).make(mapping) 

println "${Template}"

有人可以帮助我如何实现模板内部循环的要求以及如何修改模板?

*更新: 提供的所有解决方案 tim_yates 或< em> Eduardo Melzer 导致以下输出在模板末尾添加了额外的空白行。可能是什么原因?* 解决方案提供商是否无法看到此行为或问题仅限于我的系统?。

# groovy loop_template.groovy 
env:
  - name: param1
    value : 1 
  - name: param2
    value : 2 


root@instance-1:

1 个答案:

答案 0 :(得分:1)

将模板文件更改为:

#cat output.template
env:<% mapping.eachWithIndex { v, i -> %>
  - name : ${v.name}
    value : ${v.value}<% } %>

如您所见,您的模板文件需要一个名为mapping的输入参数,因此您需要将主代码更改为以下内容:

    def f = new File('output.template')
    def engine = new groovy.text.GStringTemplateEngine()

    def mapping = [
        [ name : "param1", value : "1"],
        [ name : "param2", value : "2"]
    ] // This mapping can consists of a multiple key value pairs.

    def Template = engine.createTemplate(f).make([mapping: mapping])

    println "${Template}"

输出:

#cat output.template
env:
  - name : param1
    value : 1
  - name : param2
    value : 2