在UrlMappings中使用grailsApplication注入

在UrlMappings中使用grailsApplication注入,grails,grails-controller,Grails,Grails Controller,出于某种原因,在使用以下代码时,我会收到大量错误列表: class UrlMappings { static grailsApplication static mappings = { grailsApplication.controllerClasses.each { controllerClass -> // FAILS! println(controllerClass.name) } "/$controller/$actio

出于某种原因,在使用以下代码时,我会收到大量错误列表:

class UrlMappings {
    static grailsApplication
    static mappings = {

    grailsApplication.controllerClasses.each { controllerClass -> // FAILS!
        println(controllerClass.name)
    }

    "/$controller/$action?/$id?"{}

    "/"(view:"/index")
    "500"(view:'/error')
}
错误:


其中,以下代码工作正常,并打印所有控制器名称:

class UrlMappings {
    static grailsApplication
static mappings = {

    "/$controller/$action?/$id?"{
        grailsApplication.controllerClasses.each { controllerClass -> // WORKS!
            println(controllerClass.name)
        }
    }

    "/"(view:"/index")
    "500"(view:'/error')
}
}
是否可以从内部
静态映射访问静态
grailsApplication


(我需要能够获取控制器名称,以便动态创建urlmappings)

ApplicationHolder
仍然有效时,grails文档在弃用注释中为


已弃用:使用依赖项注入或实现GrailsApplicationWare


由于
grailsUrlMappingsHolderBean
实现了
GrailsApplicationAware
,我发现下面的代码也可以在2.0中使用

class UrlMappings {
    static mappings = {        
        getGrailsApplication().controllerClasses.each{ controllerClass -> 
            if(controllerClass.name./*your logic here*/){
                "/mod/action" {
                    controller = "${controllerClass.name}"
                }
            }
        }
    }
}

使用
$controller
本质上不是你想要的吗?为什么还要在控制器上循环并在映射中打印它们?还有,可能是重复的?因为我想将所有版主控制器拆分为/mod/action,所以我查看了给定的示例,但不起作用,因为在当前的2.0版本中,
ApplicationHolder
已被弃用。虽然已弃用,但它仍然存在,并且可以正常工作。这导致我的集成测试无法继续工作。。这可能是因为我们正在从静态环境调用非静态的东西吗?这也破坏了我的集成测试。通过使用if(Environment.current!=Environment.TEST){..}包装来解决问题