Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails withForm导致错误_Grails - Fatal编程技术网

Grails withForm导致错误

Grails withForm导致错误,grails,Grails,我使用下面的代码遇到了一个问题。添加invalidToken处理程序时出错。我使用的是Grails2.3.4 withForm { // ready to go }.invalidToken { // bad submit } blaaaa/blaaa/controller.groovy:123:[静态类型检查]-无法 查找匹配方法 java.lang.ObjectinvalidTokengroovy.lang.Close。请检查一下 声明的类型正

我使用下面的代码遇到了一个问题。添加invalidToken处理程序时出错。我使用的是Grails2.3.4

 withForm {
       // ready to go
    }.invalidToken {
       // bad submit
    }
blaaaa/blaaa/controller.groovy:123:[静态类型检查]-无法 查找匹配方法 java.lang.ObjectinvalidTokengroovy.lang.Close。请检查一下 声明的类型正确,如果方法存在。@第123行, 第9栏。 用形式{ ^

正如您所看到的,使用@CompileStatic可能会导致动态代码失败,因此您需要重新编写一些代码以使其兼容。但是,Grails中有许多功能与@CompileStatic不兼容,因为它是一个相对较新的功能;自2.2发行版首次使用Groovy 2.0以来,Grails中只提供了它

因此,您必须将withForm块修改为非动态。我最近没有看过底层代码,但我猜您可以做到,但它会很难看,您会希望您没有做到。在有意义的地方使用@CompileStatic,在有区别的地方使用它;有和没有它的代码块的性能差异会很好可能需要几毫秒


我对@CompileStatic的使用还不够肯定,但我很有信心,您可以随时删除注释,代码也会正常工作;这样您就有了冗余的强制转换和非动态代码,但它仍然是非常有效的Groovy。

您需要为我们提供更多的控制器代码,以帮助您识别I假设。仅此代码段就缺少它正在使用的方法的详细信息,或者您的控制器可能正在扩展的类的详细信息,等等。您是否使用@CompileStatic?如果不使用,它是否工作?是的,文件正在使用CompileStatic。如果我删除它,它就会工作。我没有在控制器中编写代码,因此不确定删除CompileStatic是否会工作导致其他问题。@GrailsCompileStatic的目的是提供类似于@CompileStatic的静态类型检查,但要了解Grails,并能够处理@CompileStatic不知道的Grails特定交互。如果您在提交功能请求,我们可以将@GrailsCompileStatic改进为ab事实上,我们甚至可以通过@CompileStatic解决这个问题。在任何情况下,提交JIRA都将有助于进行必要的更改。