2011-12-17 61 views
3

出于某种原因,我得到一个巨大的错误列表使用时,下面的代码:使用grailsApplication注射内UrlMappings

class UrlMappings { 
    static grailsApplication 
    static mappings = { 

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

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

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

错误:http://pastebin.com/tiEsENie


凡为下面的代码工作得很好,并打印出所有控制器名称:

class UrlMappings { 
    static grailsApplication 
static mappings = { 

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

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

是不是可以访问sta来自static mappings的图片grailsApplication

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

+0

本质上不使用`$ controller`?为什么你需要遍历控制器并将其打印在映射中呢? – omarello 2011-12-17 00:42:59

+0

另外,可能重复? [http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config](http://stackoverflow.com/questions/4232884/dynamic-grails-url-mapping-config) – omarello 2011-12-17 00:46:42

回答

2

虽然ApplicationHolder仍然有效,Grails的文档说明这一点对于在弃用评论


弃用:使用依赖注入或实现GrailsApplicationAware代替


由于grailsUrlMappingsHolderBean implements GrailsApplicationAware,我发现下面的代码也适用于2.0以及

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