【问题标题】:GSP in plain Spring MVC - AST Transformation is not applied to taglib普通 Spring MVC 中的 GSP - AST 转换不适用于 taglib
【发布时间】:2015-08-27 12:17:58
【问题描述】:

我正在尝试在简单的 Spring MVC 应用程序(没有 Spring Boot)中运行 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 - 没有 getOut()生成的 .class 文件中的方法)。 另一方面,我看到 Grails 项目中已编译的标记库应用了这种转换(在查看已编译的 .class 文件时,我可以看到 getOut() 方法)。

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

【问题讨论】:

    标签: spring-mvc grails gsp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2019-06-29
      • 2017-10-01
      • 1970-01-01
      • 2018-04-19
      相关资源
      最近更新 更多