Grails的3标签库
我想申请@GrailsCompileStatic到标签库和歌厅以下错误的静态编译:Grails的3标签库
Error:(19, 16) Groovyc: [Static type checking] - Cannot find matching method com.tempvs.image.MyTagLib#render(java.util.LinkedHashMap ). Please check if the declared type is right and if the method exists.
代码示例:
@GrailsCompileStatic
class MyTagLib {
...
String myTag = { Map attrs ->
...
out << render(template: '/templates/myTemplate', model: [...])
}
}
什么我做错了,如何能我解决了这个问题?
您正在使用一些动态功能,因为通常taglibs会使用它们。即使只是调用“渲染”也是动态的。
如果你真的想要,你可以通过注入一个PageRenderer并使用它来渲染你的页面,然后输出结果HTML来解决这个问题。我不确定这是否值得,但我当然不知道你的表现要求!
例子:
import grails.compiler.GrailsCompileStatic
import grails.gsp.PageRenderer
@GrailsCompileStatic
class StaticTestTagLib {
static namespace = "staticTest"
PageRenderer groovyPageRenderer
String myTag = { Map attrs ->
out << groovyPageRenderer.render(template: '/templates/myTemplate', model: [...])
}
}
这工作,但你将有一些工作要做的你,如果你的标签库是做任何远程复杂,因为每次调用渲染,或任何其他标记将不得不为由静态编译的调用取代。这是可能的,但可能不是非常有益。
谢谢,它的工作原理,但现在我有相关的单元测试的问题:) –
我不确定创建一个只显示模板的新标签有什么意义。
Grails已经有一个呈现模板的标记库。
<g:render template="displaybook" model="['book':book,'author':author]" />
大概它做的比简化为stackoverflow示例显示更多。无论如何,我当然希望如此! :-) – Daniel
为什么你想静态编译标签库?这看起来像你可能做错了什么......但如果你能解释为什么你需要它,也许这里的某个人可以帮助找到一个适合你的解决方案! – Daniel
@Daniel,我在我的taglib中没有使用groovy动态特性,并希望提高性能。 –