我正在尝试使用 MarkupTemplateEngine 在 MJML 中渲染模板,但尝试了一段时间后我开始怀疑这是否可能。可能还是不可能?如果是的话,我想要一个可以测试的例子。
到目前为止我做了什么:
import groovy.text.markup.*
String mjmlTemplate = '''
mjml {
mj-head {
mj-title('Hello World')
mj-preview('This is a preview text')
}
mj-body {
mj-section {
mj-column {
mj-text('Hello World from MJML')
}
}
}
}
'''
TemplateConfiguration config = new TemplateConfiguration();
MarkupTemplateEngine engine = new MarkupTemplateEngine(config);
def template = engine.createTemplate(mjmlTemplate)
def renderedMJML = template.make().toString()
println renderedMJML
我得到的错误:
Caught: java.lang.NullPointerException: Cannot invoke method minus() on null object
java.lang.NullPointerException: Cannot invoke method minus() on null object
at GeneratedMarkupTemplate0$_run_closure1$_closure2.doCall(GeneratedMarkupTemplate0:4)
at GeneratedMarkupTemplate0$_run_closure1$_closure2.doCall(GeneratedMarkupTemplate0)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at GeneratedMarkupTemplate0$_run_closure1.doCall(GeneratedMarkupTemplate0:3)
at GeneratedMarkupTemplate0$_run_closure1.doCall(GeneratedMarkupTemplate0)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at GeneratedMarkupTemplate0.run(GeneratedMarkupTemplate0:2)
at test.run(test.groovy:30)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
如果我用渲染 HTML 进行测试,它工作得很好。
“模板”只是 Groovy 代码(基本上是带有闭包和映射的函数调用)。所以你必须以一种 Groovy 可以解析和调用它们的方式编写“方法”。因此在某种意义上
mj-body
解析为mj.minus(body)
,因此出现错误。不过,您可以对方法名称/标签使用引号。例如