如何在groovy中将地图传递到MarkupTemplateEngine的模板实例中?

时间:2019-10-02 18:11:04

标签: groovy

我正在创建一个模板,该模板利用markuptemplate引擎动态更新生成的HTML中的值。我知道.tpl文件也被认为是常规代码,但是我无法在模板内部传递地图。

下面的代码将显示我要实现的目标:


// File: LayoutTemplate.groovy
import groovy.text.*
import groovy.text.markup.*

// Create engine with configuration.
TemplateConfiguration config = new TemplateConfiguration()
MarkupTemplateEngine engine = new MarkupTemplateEngine(config)

Map testMapToPass = ['userEast': 'sam', 'userWest': 'matt']

// Question is how do i pass the above map inside the instance of the template?

text = '''\
layout 'main.tpl',
    pageTitle: 'Welcome',
    mainContents: contents {
        h1 'Welcome'
    }, true,
    //testMapToPass = ['test': 'one']
    testcontent: contents{ ul {
        testMapToPass.each {k,v->
            li k
            newLine()
            li v
        }
    }
} 

'''
Template template = engine.createTemplate(text)


// Render output for template.
Writer writer = new StringWriter()                         
Writable output = template.make([:]) 
output.writeTo(writer)  
String result = writer.toString()

我的main.tpl文件看起来像这样

// File: main.tpl
yieldUnescaped '<!DOCTYPE html>' 
html {
    head {
        // Use pageTitle layout property.
        meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"')
        title(pageTitle)
    }
    body {
        section(id: 'main') {
            // Render mainContents layout property.
            mainContents()
        }

        section(){
            h3 'Details'
        }
        section(id: 'test'){
            testcontent()
        }

    }
}

我在他们的官方文档页面上尝试了fragment方法以及其他方法,因为它们没有我可以遵循的具体示例,因此很难遵循。

0 个答案:

没有答案