grails – Controller @Mixin在重新编译运行应用程序后才能正常
在我最新的grails 2.3.0项目中,我正在使用@Mixin注释来混合一个帮助程序类,以使我的控制器更加干燥.
如果在控制器内进行一些更改以强制重新编译控制器,则mixin正在工作.在初始编译(grails run-app)之后,助手没有混入 – 我得到一个MissingMethodException试图从助手类访问一个方法. 这是src / groovy的助手: class ProjectHelper { def withProject(id,Closure c) { def project = Project.get(id) if (project) { c.call project } else { flash.message = 'Project not found!' render view: 'myView' return } } } 和(其中一个)使用ProjectHelper的控制器: @Mixin(ProjectHelper) class ProjectController { def index() { withProject params.projectId,{project -> // do something with the project } } } 当我使用grails clean清理项目并启动应用程序时,访问项目/索引后出现以下错误: MissingMethodException occurred when processing request: [GET] /<myApp>/project/ No signature of method: <myPackage>.withProject() is applicable for argument types: (java.lang.String,<myPackage>.ProjectController$_index_closure1_closure10) values: [1,<myPackage>.ProjectController$_index_closure1_closure10@40d889b5] 在ReportController中进行一些更改(例如添加单个空格)之后,grails会编译2个源文件,并且可以使用带有Project的方法.访问项目/索引按预期工作. 这里出了什么问题?这是一个错误还是我错过了什么? 更新 事实证明,我完全错过了,使用grails.util.Mixin给了我另一个异常(MissingPropertyException),因为缺少对混合类属性的访问(在我的情况下:flash)(参见JIRA this issue),它正在使用groovy. lang.Mixin(重新编译后). 有没有办法在运行时手动重新编译/注入/混合groovy.lang.Mixin,或者我必须找到else部分的另一个错误处理,直到问题得到解决? 有什么建议? 解决方法
当使用mixins遵循类似的代码重用模式时,我经常遇到相同的MissingMethodException.
在我的例子中,将groovy.lang.Mixin更改为grails.util.Mixin(或者更具体地说,将grails.util.Mixin的导入添加到我的控制器)可以完全解决问题. 至于无法访问控制器变量,您可能会等待GRAILS-9905被解决.我应该注意到,在缺陷讨论中列出了一些建议的解决方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |