GSP in plain Spring MVC - AST 转换未应用于 taglib

GSP in plain Spring MVC - AST Transformation is not applied to taglib

我正在尝试在简单的 Spring MVC 应用程序(没有 Spring 引导)中 运行 GSP 视图。我正在尝试复制位于此处的示例: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 文件中没有 getOut() 方法)。 另一方面,我看到 Grails 项目中编译的 taglibs 应用了这种转换(我可以在查看编译的 .class 文件时看到 getOut() 方法)。

编译的class文件中没有getOut()方法是什么原因? Grails taglib 编译过程与手动编译taglib 有区别吗?

如果有人在长时间调试后有兴趣,我找到了解决这个问题的方法... 似乎 taglib class 名称必须以 'TagLib' 结尾(区分大小写)我的 class 被命名为 'ExampleTaglib'(小写 'L')因此 AST未应用转换(不符合 grails 约定)。 class 名称检查在 AbstractGrailsArtefactTransformer#isValidArtefactTypeByConvention 方法的第二个 if 中完成。