Grails withForm导致错误

时间:2014-11-02 23:42:43

标签: grails

我使用下面的代码遇到了问题。我添加invalidToken处理程序时收到错误。我使用的是Grails V 2.3.4

 withForm {
       // ready to go
    }.invalidToken {
       // bad submit
    }
  

blaaaa / blaaa / controller.groovy:123:[静态类型检查] - 不能   找到匹配方法   java.lang.Object继承#invalidToken(groovy.lang.Closure)。请检查是否   声明的类型是正确的,如果方法存在。 @第123行,   第9栏。              withForm {              ^

1 个答案:

答案 0 :(得分:0)

正如您所看到的,使用@CompileStatic会导致动态代码失败,因此您需要重新编写一些代码才能兼容。然而,Grails中有许多功能与@CompileStatic不兼容,因为它是一个相对较新的功能;自从2.2版本开始使用Groovy 2.0以来,它只能在Grails中使用。

因此,您必须将withForm块修改为非动态。我最近没有查看底层代码,但我猜你可以做到,但它会很难看,你会希望你没有。在有意义的地方使用@CompileStatic(它会产生差异;这个代码块的性能差异可能是几毫秒)。

我还没有足够确定@CompileStatic,但我非常有信心你可以随时删除注释并且代码可以正常工作;然后你会有冗余的强制转换和非动态代码,但它仍然是完全有效的Groovy。