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

标签 templates groovy

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

当模板(下面的示例)调用方法 <% generateItemOutput(itemDescriptor.itemList) %> 时我遇到异常:

groovy.lang.MissingMethodException: No signature of method:
SimpleTemplateScript1.generateItemOutput() is applicable for
argument types: (java.util.ArrayList)

我尝试将所有方法设为静态,并在模板中添加对静态方法的导入(如 suggested here ),但我得到 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 脚本中静态方法的包路径。

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

干杯。

最佳答案

好吧,我成功地让它工作了,最后它相当简单。我必须对所有生成和模板方法使用静态,然后将完全限定的包名称添加到模板内的方法,而不是尝试进行导入。

还发现我在命令中也缺少打印。这是固定模板:

public static String itemDescriptorTemplate() {
    return = '''\
${itemDescriptor.name} {
repository = "${itemDescriptor.repository}"
props = [
    <% print uk.co.e2x.convert.XMLToSlurp.generateItemOutput(itemDescriptor.itemList) %>
]
}
'''

关于templates - Groovy 嵌套模板 - 无法从模板内调用类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817814/

相关文章:

grails - 我有哪些保护 Spring Security UI 的选项?

java - 在java jre上使用单个jar文件运行groovy未编译的脚本

json - 如何遍历 json 响应

c++ - 只返回传递值的默认函数?

c++ - 如何在 C++ 的 main 函数中使用模板数据类型?

grails - Grails 中已弃用 install-plugin 命令

groovy - 将 Groovy TemplateEngine 与任何变量名称绑定(bind)

xcode - 在 Xcode 中的所有新文件上完全更改整个 "header"

c++ - 成员函数指针的模板参数推导

c++ - 默认模板参数结果为 "expected type-specifier"