我正在尝试使用 Groovy 的 SimpleTemplateEngine 来生成一些输出而不是 StringBuilders,但是我无法让模板成功调用我的类中的其他方法(最终调用其他模板以形成嵌套链)。
当模板(下面的示例)调用该方法时<% generateItemOutput(itemDescriptor.itemList) %>
,我得到一个异常:
groovy.lang.MissingMethodException: No signature of method:
SimpleTemplateScript1.generateItemOutput() is applicable for
argument types: (java.util.ArrayList)
我尝试将所有方法设为静态,并将导入添加到模板中的静态方法(如此处所建议),但我得到unable to resolve class ...
了我使用的导入:
SimpleTemplateScript1.groovy: 1: unable to resolve class uk.co.e2x.convert.XMLToSlurp.generateItemOutput
@ line 1, column 20.
out.print(""""""); import uk.co.e2x.convert.XMLToSlurp.generateItemOutput ;
^
这是我在没有static
s 的情况下所做的示例:
public String generateItemDescriptorOutput(itemDescriptor) {
def params = [itemDescriptor: itemDescriptor]
def template = new groovy.text.SimpleTemplateEngine().createTemplate(itemDescriptorTemplate())
def writeable = template.make(params)
return writeable.toString()
}
public String generateItemOutput(itemList) {
...
}
public String itemDescriptorTemplate() {
return = '''\
${itemDescriptor.name} {
repository = "${itemDescriptor.repository}"
props = [
<% generateItemOutput(itemDescriptor.itemList) %>
]
}
'''
}
我用它调用它,java -cp ...
但通过 groovy 调用它时遇到了同样的问题。我转向通过 java 调用它的原因是我无法在 groovy 脚本中计算出静态方法的包路径。
有没有人有任何从模板中调用您自己的脚本/类方法的具体示例,或者可以告诉我我做错了什么?
干杯。