我试图在简单的Spring MVC应用程序中运行GSP视图(没有Spring Boot)。我试图复制位于此处的示例:https://github.com/grails/grails-boot/tree/master/sample-apps/gsp但我试图在普通的Spring MVC环境中运行它。
我成功地达到了渲染GSP页面的阶段,一些g:标签甚至正在工作(例如g:if和g:each)但是当我尝试添加标签库时出现问题。我已经设置了一个简单的标签库,如下所示:
@TagLib
@Component
class ExampleTaglib {
static namespace = "xx"
Closure testtag = { attrs, body -> // simple "def" leads to tag not being found
out << "Test"
}
}
当我尝试使用该标记时,出现错误:No such property: out.
我花了一些时间来调试这个问题,它表明添加org.codehaus.groovy.grails.plugins.web.api.TagLibraryApi
方法的AST转换似乎没有应用(我使用groovyc和所有必需的库编译了taglib - 没有{结果.class文件中的{1}}方法。
另一方面,我看到Grails项目中已编译的taglib已应用此转换(我可以在查看已编译的.class文件时看到getOut()
方法)。
编译后的类文件中是否有任何getOut()
方法? Grails taglib编译过程是否与手动编译taglib不同?
答案 0 :(得分:1)
如果有人对长时间的调试后感兴趣,我找到了解决这个问题的方法......
似乎taglib类名必须以&#39; TagLib&#39;结尾。 (区分大小写)我的班级名为&#39; ExampleTaglib&#39; (小写&#39; L&#39;)因此没有应用AST转换(不符合grails惯例)。
类名检查是在if
方法的第二个AbstractGrailsArtefactTransformer#isValidArtefactTypeByConvention
中完成的。