Templates Groovy嵌套模板-无法从模板内调用类中的方法

Templates Groovy嵌套模板-无法从模板内调用类中的方法,templates,groovy,Templates,Groovy,我试图使用Groovy的SimpleTemplateEngine来生成一些输出,而不是StringBuilder,但是我无法让模板成功地调用类中的其他方法(最终调用其他模板以形成嵌套链) 当模板(下面的示例)调用方法时,我得到一个异常: groovy.lang.MissingMethodException: No signature of method: SimpleTemplateScript1.generateItemOutput() is applicable for argument t

我试图使用Groovy的SimpleTemplateEngine来生成一些输出,而不是StringBuilder,但是我无法让模板成功地调用类中的其他方法(最终调用其他模板以形成嵌套链)

当模板(下面的示例)调用方法
时,我得到一个异常:

groovy.lang.MissingMethodException: No signature of method:
SimpleTemplateScript1.generateItemOutput() is applicable for
argument types: (java.util.ArrayList)
我已尝试将所有方法设置为静态,并将导入添加到模板中的静态方法(as),但我无法将类…解析为我使用的导入:

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) %>
]
}
'''
}
公共字符串GenerateItemDescriptorRoutPut(itemDescriptor){
def params=[itemDescriptor:itemDescriptor]
def template=new groovy.text.SimpleTemplateEngine().createTemplate(itemDescriptorTemplate())
def WRITABLE=模板.make(参数)
返回可写的.toString()
}
公共字符串generateItemOutput(itemList){
...
}
公共字符串itemDescriptorTemplate(){
返回=“”\
${itemsdescriptor.name}{
repository=“${itemDescriptor.repository}”
道具=[
]
}
'''
}
我用
java-cp…
调用它,但通过groovy调用时遇到了同样的问题。我之所以转而通过java调用它,是因为我无法在groovy脚本中计算出静态方法的包路径

有没有人有任何从模板中调用自己的脚本/类方法的具体示例,或者可以告诉我我做错了什么


干杯。

好的,我设法让它工作起来,结果很简单。我必须对所有的generate和template方法使用statics,然后将完全限定的包名添加到模板内的方法中,而不是尝试进行导入

我还发现命令中缺少一个打印。以下是固定模板:

public static String itemDescriptorTemplate() {
    return = '''\
${itemDescriptor.name} {
repository = "${itemDescriptor.repository}"
props = [
    <% print uk.co.e2x.convert.XMLToSlurp.generateItemOutput(itemDescriptor.itemList) %>
]
}
'''
公共静态字符串itemDescriptorTemplate(){
返回=“”\
${itemsdescriptor.name}{
repository=“${itemDescriptor.repository}”
道具=[
]
}
'''

我使用如下静态实用程序方法在父模板中包含嵌套模板:

类模板工具{
静态字符串生成输出(字符串templateFilename、映射templateBinding){
URL templateResource=TemplateUtils.classLoader.getResource(templateFilename)
assert templateResource:“找不到“${templateFilename}”的资源”
新建GStringTemplateEngine().createTemplate(templateResource).make(templateBinding)
}
}
然后在父模板中:

public static String itemDescriptorTemplate() {
    return = '''\
${itemDescriptor.name} {
repository = "${itemDescriptor.repository}"
props = [
    <% print uk.co.e2x.convert.XMLToSlurp.generateItemOutput(itemDescriptor.itemList) %>
]
}
'''
亲爱的$to
向……致意
父模板的绑定变量被中继到
变量
变量中的“letterContent”模板