加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

grails – Controller @Mixin在重新编译运行应用程序后才能正常

发布时间:2020-12-14 16:29:13 所属栏目:大数据 来源:网络整理
导读:在我最新的grails 2.3.0项目中,我正在使用@Mixin注释来混合一个帮助程序类,以使我的控制器更加干燥. 如果在控制器内进行一些更改以强制重新编译控制器,则mixin正在工作.在初始编译(grails run-app)之后,助手没有混入 – 我得到一个MissingMethodException试
在我最新的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被解决.我应该注意到,在缺陷讨论中列出了一些建议的解决方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读