普通Spring MVC中的GSP - AST转换不适用于taglib

时间:2015-06-11 16:57:23

标签: spring-mvc grails gsp

我试图在简单的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不同?

1 个答案:

答案 0 :(得分:1)

如果有人对长时间的调试后感兴趣,我找到了解决这个问题的方法...... 似乎taglib类名必须以&#39; TagLib&#39;结尾。 (区分大小写)我的班级名为&#39; ExampleTaglib&#39; (小写&#39; L&#39;)因此没有应用AST转换(不符合grails惯例)。 类名检查是在if方法的第二个AbstractGrailsArtefactTransformer#isValidArtefactTypeByConvention中完成的。