Groovy:使用GStringTemplateEngine()的模板引擎中的多个循环 [英] Groovy : multiple loops in template engine using GStringTemplateEngine()
问题描述
这个问题与之前发布的早期问题有关。
为了进一步增强我的模板我需要在模板引擎中有多个循环,并且这些值需要从配置派生的HashMap变量中替换file 。
我的HashMap看起来像这样,比如 envVar
:
envVar = [
PROJECT:name,
env:[
[name:param1,value:value1] ,
[name:param2,value:value2],
[name:param3,value:value3]],
ports:[
[protocol:port1,port:1000] ,
[protocol:port2,port:2000]]
]
我的模板引擎如下所示:
- env:
<<需要在这里使用env变量
- name:param1
value:value1
....
>>
项目:$ {PROJECT}
......
......
......
端口:
<<需要在这里使用ports变量
- port:1000
protocol:port1
....
>>
代码片段如下所述。
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
// ....
// envVar来源于另一个文件
// ....
def Template = engine.createTemplate(f).make(envVar)
println$ {Template}
有人能解释我如何修改上面的代码片段,模板来确保envVar将在模板引擎中被正确替换。 http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html#_iterating_on_a_listrel =nofollow noreferrer> each
为每个变量。您的模板文件需要如下所示:
#cat output.template
- env:<%env。每个{v - > %GT;
- name:$ {v.name}
value:$ {v.value}<%}%>
项目:$ {PROJECT}
......
......
......
端口:< %ports.each {v - > %GT;
- port:$ {v.port}
协议:$ {v.protocol}<%}%>
然后,您的主脚本应该如下所示:
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
def envVar = [
PROJECT:name,
env:[
[name:'param1',value:'value1'],
[name:'
[name:'param3',value:'value3']
],
端口:[
[protocol:'port1',value:'value2'], ,port:1000],
[protocol:'port2',port:2000]
]
]
def Template = engine.createTemplate(f).make (envVar)
$ b println$ {Template}。trim()
输出:
#cat output.template
- env:
- name:param1
value:value1
- name:param2
value:value2
- name:param3
值:value3
项目:projectName
......
......
......
端口:
- port:1000
protocol:port1
- port:2000
protocol:port2
This question is in continuation with earlier question I have posted before.
To enhance my templates further I need to have multiple loops in the template engines and the values need to be replaced from the HashMap Variables that were derived from a configuration file.
My HashMap looks something like this, let say envVar
:
envVar = [
PROJECT:name,
env:[
[name:param1, value:value1],
[name:param2, value:value2],
[name:param3, value:value3]],
ports:[
[protocol:port1, port:1000],
[protocol:port2, port:2000]]
]
My template engine looks like this:
- env:
<< NEED TO LOOP HERE WITH env variables
- name : param1
value : value1
....
>>
project: "${PROJECT}"
......
......
......
ports:
<< NEED TO LOOP HERE WITH ports variables
- port: 1000
protocol : port1
....
>>
Code snippet is described below.
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
//....
//envVar are derived from another file
//....
def Template = engine.createTemplate(f).make(envVar)
println "${Template}"
Can someone explain me how to modify the above code snippet and templates to make sure the envVar will be replaced properly in the template engine.
You need to do an each
for every variable. Your template file needs to look like this:
#cat output.template
- env:<% env.each { v -> %>
- name : ${v.name}
value : ${v.value}<% } %>
project: "${PROJECT}"
......
......
......
ports:<% ports.each { v -> %>
- port: ${v.port}
protocol: ${v.protocol}<% } %>
Then, your main script should look like this:
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
def envVar = [
PROJECT: name,
env:[
[name:'param1', value:'value1'],
[name:'param2', value:'value2'],
[name:'param3', value:'value3']
],
ports:[
[protocol:'port1', port:1000],
[protocol:'port2', port:2000]
]
]
def Template = engine.createTemplate(f).make(envVar)
println "${Template}".trim()
output:
#cat output.template
- env:
- name : param1
value : value1
- name : param2
value : value2
- name : param3
value : value3
project: "projectName"
......
......
......
ports:
- port: 1000
protocol: port1
- port: 2000
protocol: port2
这篇关于Groovy:使用GStringTemplateEngine()的模板引擎中的多个循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!